ガイド
商品属性の抽出・正規化・マッピングの方法
整った商品属性があってこそ、フィルター、比較、フィード、コンプライアンスの下書きが機能します。このガイドでは、サプライヤーごとにばらつきのある値を一貫したデータに変えるための、スキーマ、抽出、単位と用語のルール、分類へのマッピングを解説します。
サプライヤーによって、同じものの書き方は異なります。あるデータシートは「容量:1,5 l」、別のものは「1500 ml」、さらに別のものは文章の中に「1.5リットル入ります」と埋もれています。買い物客にとっては同じ1つの事実ですが、フィルターやフィードにとっては関連のない3つの文字列です。商品属性の正規化では、こうしたばらつきを、1つの属性名のもとで、1つの単位の、1つの値にまとめます。
このガイドは、実務での作業の順序に沿って進みます。スキーマ、抽出、数値とテキストの正規化、分類へのマッピング、バリエーション、検証です。例には実際の単位コードと分類の構造を使っているため、そのまま応用できます。
商品属性とは何か(何ではないか)
商品属性とは、名前と値を持つ特性のことです。素材=ステンレス鋼、容量=1.5 L、色=ブラックなどです。属性抽出の研究では、これを属性と値のペアと呼びます。属性は商品そのものを表し、どこで販売されても変わらないため、説明文の中だけでなく、構造化された項目に入れるべきです。
属性と混同しやすい隣接する3つの概念があり、混同すると、後のスキーマの問題の大半が生じます。
| 概念 | 目的 | 例 | 通常の格納先 |
|---|---|---|---|
| 属性 | 商品の特性を表す | 素材:ステンレス鋼、容量:1.5 L | 仕様表、フィルター、カテゴリー別の項目 |
| 識別子 | 商品や取引単位を一意に特定する | GTIN、MPN、SKU、型番 | 識別子専用の項目 |
| バリエーションオプション | 買い手が選択する属性 | 色:ブラック/ホワイト、サイズ:S/M/L | バリエーションの軸(Shopifyでは最大3つのオプションが可能) |
| 説明 | 利点や使い方を文章で説明する | 「数分で満水のケトルが沸騰」 | 商品説明と箇条書き |
抽出を始める前に、属性スキーマを定義する
属性スキーマは、すべての値が満たすべき約束事です。スキーマがなければ、抽出はソースに書かれていることをそのまま取り込むだけになり、正規化は当て推量になります。属性ごとに、名前、データ型、標準単位、許容値または検証ルール、複数の値を持てるか、どこで必須かを決めておきます。
スキーマは、巨大なリストを1つ作るのではなく、製品ファミリーごとに用意します。ケトルには容量と定格電力が必要で、Tシャツには繊維の組成とサイズが必要です。まず、販売チャネルが要求する属性と、買い物客が絞り込みに使う属性から始め、データシートで確実に得られる技術属性を加えていきます。
| 属性 | データ型 | 単位/形式 | 許容値またはルール | 必須 |
|---|---|---|---|---|
| model_number | テキスト | — | メーカーが印刷したとおり。スペースを追加しない | はい |
| gtin | テキスト(数字) | 8、12、13、または14桁 | 有効なGS1チェックディジット | 割り当てられている場合 |
| capacity | 小数 | LTR(リットル) | 0.1〜5.0。バリエーションごとに1つの値 | はい |
| rated_power_min / rated_power_max | 整数 | WTT(ワット) | 最小値≦最大値。どちらも同じ定格の行から取得 | はい |
| body_material | 列挙型(複数の値) | — | ステンレス鋼、ガラス、プラスチック、セラミック | はい |
| color | 列挙型 | — | 基本色のリスト。マーケティング上の名称は別に保存 | はい(バリエーションごと) |
| net_weight | 小数 | KGM(キログラム) | 0より大きいこと。総重量を超えてはならない | 配送用 |
属性値の出どころと、優先すべき情報源
値は通常、複数の情報源から届き、それらが常に一致するとは限りません。競合が、最後に編集した人の判断ではなく常に一貫して解決されるよう、属性ごとに情報源の優先順位を決めておきます。
実務上の基本方針は、技術文書をマーケティング文より優先し、一般的な文書よりも具体的な文書を優先することです。同等の情報源が食い違う場合(たとえばデータシートと梱包で重量が異なる場合)は、平均を取ったりどちらかを選んだりせず、どちらが最新かをサプライヤーに確認します。
- データシートと仕様書:寸法、定格、素材、性能値について最も信頼できる情報源で、多くは表になっています。
- 梱包とラベルのデザインデータ:内容量、警告、表示など、パッケージに印刷された内容については信頼できる情報源です。
- 安全データシート:化学製品の危険有害性の分類、組成、物理的性質。マーケティング用の属性ではありません。
- サプライヤーの商品説明:表には出てこない属性(スタイル、想定される用途、対応機種など)に役立ちますが、精度は最も低くなります。
商品説明から属性を抽出する方法
自由記述の説明文は、値が文章に包まれ、宣伝的な表現で修飾され、ときには否定形で書かれているため、最も扱いにくい情報源です。ルール、既知の値の辞書、言語モデルのいずれを使う場合でも、出力の信頼性を保つ手順は同じです。
- テキストを読む前に、製品ファミリーの対象属性を、許容値と単位とともに一覧にします。
- テキストを文と箇条書きに分け、候補となる値を探します。単位付きの数値、既知の用語、「〜に対応」などのパターンです。
- 各候補について、前後の文脈から、限定表現(「最大」「約」「〜から」)、否定(「BPAフリー」「〜には適しません」)、条件(「フタ付き」「20 °Cの場合」)を確認します。
- 各値は、必ず1つの属性にだけ割り当てます。数値が2つの属性のどちらにも当てはまり得る場合は、推測せず、未割り当てのままレビューに回します。
- 次のセクションで説明するルールで値と単位を正規化し、元のテキストも併せて保持します。
- 宣伝文だけから得た属性にはすべて印を付け、仕様表や宣言書の下書きに使う前に、確認者がデータシートで裏付けを取れるようにします。
| 説明文のテキスト | 属性 | 抽出された値 | 備考 |
|---|---|---|---|
| 「…容量1.7リットルのステンレス製ケトル…」 | capacity、body_material | 1.7 LTR、ステンレス鋼 | 1つのフレーズに2つの属性 |
| 「…BPAフリーのプラスチック製フタ付き…」 | lid_material、bpa_free | プラスチック、true | 否定は素材ではなく、真偽値になる |
| 「…IHクッキングヒーターには適しません…」 | induction_compatible | false | 否定文は反転する |
| 「…マットブラックとクリームの2色展開…」 | color(バリエーションオプション) | ブラック、ベージュ | マーケティング上の名称は別に保持 |
データシートの見出しを標準の属性名に対応付ける
メーカーごとに、同じ属性の呼び方は異なり、多くは自国の言語で書かれています。実際に出会った見出しのテキストを、自社の標準の属性名に対応付ける同義語テーブルを作成します。最初は急速に増えますが、やがて安定し、最も再利用しやすい正規化の資産になります。見出しに印刷された単位も記録してください。「重量(lbs)」という見出しの下では、どのセルにも単位が繰り返されません。表のレイアウト、スキャン、OCRについては、PDFから製品データを抽出するガイドで解説しています。
| 印刷されている見出し | 標準の属性 | 見出しから分かる単位 | 備考 |
|---|---|---|---|
| 定格電力 / 消費電力 / Leistung | rated_power | WTT | 入力電力であり、出力ではないことを確認する |
| 正味重量 / 重量(単位)/ Nettogewicht | net_weight | KGMまたはLBR(印刷されたとおり) | 配送重量ではない |
| 容量 / 体積 / Fassungsvermögen | capacity | LTRまたはMLT | 容器の容量であり、梱包の体積ではない |
| 寸法(幅×奥行×高さ)mm | width、depth、height | MMT | 軸の順序は見出しから判断する |
数値と単位を正規化する
定量的な属性はすべて、数値と単位コードの2つの項目として保存します。国連CEFACT勧告第20号(「国際貿易で使用される計量単位のコード」)は、そのための3文字の共通コードを定めており、schema.orgもunitCodeプロパティで同じコードを使っています。たとえば、25のQuantitativeValueにunitCode CMTを指定します。「cm」「cms」「centimetres」といった自由記述の単位の代わりにこれらのコードを使えば、不一致の一種類が丸ごと解消されます。
属性ごとに標準の単位を1つ選び(通常はSI単位かその十進倍数)、インポート時に変換することで、サプライヤー間で値を正しく比較できるようにします。トレーサビリティのため、印刷されたとおりの元の値と単位も保持し、エクスポート時にチャネルの単位へ戻します。ShopifyのProduct CSVでは重量をグラム単位で指定し、WooCommerceでは、ストアに設定された重量と寸法の単位を使います。
気づきにくいエラーを招く細部に注意してください。小数点と桁区切りの記号は文書のロケールによって異なります。ドイツ語のデータシートの「1.000 W」は1,000ワットです。範囲は最小値と最大値の項目に分け、公差は公称値とは別に保存し、「約」や「最大」といった修飾語は専用の項目に保持します。ヤード・ポンド法の換算には正確な定義を使います(1インチ=25.4 mm、1ポンド=0.45359237 kg)。丸めは表示時に1回だけ行います。
| 印刷されている元の値 | 正規化後の値 | UNECE勧告第20号のコード | 適用したルール |
|---|---|---|---|
| 1,5 l | 1.5 | LTR | 小数点のカンマを、文書のロケールに従って解釈 |
| 1500 ml | 1.5 | LTR | 属性の標準単位に変換。元の値は保持 |
| 1.000 W(ドイツ語のデータシート) | 1000 | WTT | ピリオドを桁区切りとして解釈 |
| 220–240 V~ | 最小220、最大240 | VLT | 範囲を分割。「~」は電流の種類としてACで保存 |
| Ø 12 mm ± 0,2 | 公称値12、公差0.2 | MMT | 公差は別に保存 |
| 約2.3 kg | 2.3(修飾語:約) | KGM | 修飾語は削除せず保持 |
| 5 lb | 2.26796 | KGM | 0.45359237で換算。元のLBRを保持 |
| 1/2 in | 12.7 | MMT | 分数を数値化。元のINHを保持 |
| 6個入りパック | 6 | H87 | 1パックあたりの個数 |
テキスト属性には管理された語彙を使う
管理された語彙とは、テキスト属性が取り得る値のリストと、それぞれに対応付ける同義語のことです。これにより、「色:ブラック」のフィルターで、「blk」「Black」「schwarz」と記載された商品も拾えるようになります。
マーケティングとフィルタリングで求めるものが異なる場合は、フィルターやフィードに使う正規化された基本値と、表示用のメーカー独自の名称という2つの項目を持ちます。「Midnight Graphite」は商品ページの詳細としては良くても、フィルターの値としては役に立ちません。「グレー」はその逆です。多言語のカタログでは、語彙の値を言語に依存しないコードとして保存し、そのラベルを翻訳しておくと、同じ商品が、どの言語のストアフロントでも正しく絞り込めます。
| 元のテキスト値 | 正規化後の値 | 語彙のルール |
|---|---|---|
| blk / BLACK / schwarz | black | 同義語と翻訳を1つのコードに対応付ける |
| Midnight Graphite | gray(表示名は保持) | マーケティング上の名称は別に保存 |
| 18/8 SS | stainless steel | 略語を展開。グレードは別の属性として保持 |
| 綿95%、エラスタン5% | cotton 95; elastane 5 | 組成を「値と百分率」のペアで保存 |
| はい / ✓ / 付属 | true | 真偽値は true または false に統一 |
属性を分類体系とチャネルのスキーマに対応付ける
分類体系は、商品にどの属性が適用されるか、またそれらを何と呼ぶかを決めます。自由に選べることはまれで、小売業者はGS1 GPC、卸売業者はETIM、ShopifyはStandard Product Taxonomyを求め、検索エンジンはschema.orgマークアップを読み取ります。自社の属性スキーマをマスターとして維持し、外部の各分類体系へのマッピングを管理します。
GS1 GPCでは、ブリックが構成の基本単位で、ブリック属性には、牛乳が動物由来か非動物由来かといった詳細が含まれます。ETIMは、クラスごとに、固定された値のリストと単位を持つ、事前定義の特性一式を提供し、そのモデルを17言語で公開しています。Shopifyは、商品の主な機能に基づいて選ぶカテゴリーを1つ求め、それを設定するとカテゴリーメタフィールドが利用できるようになります。schema.orgのProductには、gtin、mpn、brand、color、material、size、weightといった専用のプロパティがあります。
| 分類体系 | 主な利用者 | 構造 | 属性モデル | 注意点 |
|---|---|---|---|---|
| GS1 GPC | 小売・消費財のデータ交換 | セグメント > ファミリー > クラス > ブリック | ブリック属性(定義済みの値付き) | 分類のための体系であり、完全な仕様モデルではない |
| ETIM | 技術系の卸売:電気、空調、配管 | 同義語付きのクラス | 英数字、論理値、数値、範囲のいずれかの型を持つ特性と単位 | 特性の値は、クラスのリストから選ぶ必要がある |
| Shopify Standard Product Taxonomy | Shopifyストア | カテゴリーの階層表記またはカテゴリーID | カテゴリーごとのカテゴリーメタフィールド(商品属性) | CSVでは、階層表記かIDのどちらか一方を指定し、両方は指定しない |
| schema.org Product | 検索エンジン向けの構造化データ | プロパティを持つ単一のProductタイプ | 専用のプロパティ。unitCode付きのQuantitativeValue | additionalPropertyより先に、具体的なプロパティを使う |
属性を重複させずにバリエーションを扱う
バリエーションとは、大半の属性が共通で、一部だけが異なる商品のことです。共通の属性を持つ親レコードと、バリエーションの軸(色、サイズ、容量など)およびそれに伴って変わる値、固有の識別子だけを持つ子レコードとしてモデル化します。GS1のGTINルールでは、スタイル、色、サイズの各バリエーションを、固有のGTINを持つ別個の商品として扱うため、識別子は常に子レコードに持たせます。
複数モデルの仕様表は、バリエーションに関するエラーの大半を引き起こします。モデルごとに1列ある表は、列ごとに1レコードに分割し、列をまたいで1回だけ印刷された値(結合セルや、表の下の「全モデル:230 V」など)は、該当するすべての子レコードにコピーします。ShopifyのCSVでは、Option1 LinkedToの列がバリエーションオプションをカテゴリーメタフィールドに紐づけます。1つの商品には、最大3つのオプションと2,048のバリエーションを設定できます。
ルールとQAサンプリングで属性を検証する
検証ルールで見つけられるのは、型の誤り、単位の誤り、あり得ない値、必須属性の欠落といった機械的なエラーです。インポートのたびに実行し、失敗したものは、黙って値を捨てるのではなく、確認者に回します。
ルールでは、もっともらしいが誤っている値は見つけられません。隣のモデルの列からコピーされた容量は、すべてのチェックを通過してしまいます。QAサンプリングならそれを見つけられます。サンプルとして選んだレコードを元の文書と、項目ごとに照合します。普遍的なサンプルサイズやエラーの許容基準はなく、リスクに応じて設定します。
- サプライヤーごとにレコードのサンプルを抽出します。新規のサプライヤーや新しい文書のレイアウトに重点を置きます。
- サンプリングした各属性を元の文書と照合し、一致、誤った値、欠落した値を別々に記録します。
- レコード単位だけでなく属性単位でエラー率を計算し、問題を引き起こしている属性や見出しの対応付けを見つけます。
- 安全に関わる属性と、法令で求められる属性は、サンプルではなく、すべてのレコードで確認します。
| ルールの種類 | 例 | 失敗した場合の対応 |
|---|---|---|
| 型と形式 | capacityは小数、gtinは数字のみ | 値を却下し、確認用に元のテキストを保持する |
| 範囲と妥当性 | ケトルの容量が0.1〜5 Lの範囲 | 単位または区切り記号の誤りの可能性があるものとして印を付ける |
| 列挙値への所属 | colorは基本色のリストに含まれること | 同義語を対応付けるか、語彙に追加する |
| 項目間 | 最小値≦最大値、正味重量≦総重量 | 両方の項目に印を付ける |
| チェックディジット | GTINがGS1のモジュラス10チェックに合格する | 却下し、元の文書から読み直す |
| 網羅性 | そのファミリーとチャネルの必須属性がすべて入力されている | 公開をブロックし、サプライヤーにデータを依頼する |
属性の正規化を大規模に運用する
スキーマ、同義語テーブル、語彙、ルールは、この作業の中で長く使える部分であり、抽出方法はその下で入れ替わり得ます。これらをバージョン管理し、それぞれに担当者を置き、手作業による修正は理由とともに記録し(同じ修正が繰り返される場合はルールが欠けている証拠です)、新しいサプライヤーを迎えるたびに同義語テーブルを見直します。
属性がサプライヤーのPDFにある場合、Doc2Shelfで抽出の工程を担えます。アップロードされたデータシート、仕様書、SDS、カタログを読み取り、値と単位を印刷されたとおりに保持し、根拠としてページと短い引用を付け、不足している必須データに印を付けます。その後、レコードが出品情報や宣言書の下書きに反映される前の確認の段階で、正規化ルールが適用されます。
よくある質問
- 商品属性とは何ですか?
- 商品属性とは、素材、色、容量、寸法、定格電力など、商品を説明する名前と値を持つ特性です。説明文とは異なり、構造化された項目に格納されるため、フィルター、仕様表、フィード、カテゴリーの要件に活用できます。
- 商品属性とバリエーションの違いは何ですか?
- 属性は商品のあらゆる特性です。バリエーションは、サイズや色など、買い手が選択する1つ以上の属性が異なる商品のバージョンです。選択される属性がバリエーションオプションであり、それ以外は親商品に共通のまま残ります。
- 商品説明から属性を抽出するには?
- まず対象の属性と許容値を定義し、テキストを文に分割して候補となる値を見つけ、属性に割り当てる前に、それぞれの限定表現、否定、条件を確認します。宣伝文にしか現れない属性は、データシートで確認します。
- UNECE勧告第20号の単位コードとは何ですか?
- UN/CEFACTが公表している、国際貿易で使われる計量単位の3文字のコードです。たとえば、メートルはMTR、キログラムはKGM、リットルはLTR、ワットはWTTです。schema.orgのunitCodeプロパティも同じコードを使います。
- 元の値と変換後の値のどちらを保存すべきですか?
- 両方です。フィルター、比較、検証のために正規化した数値と単位コードを保存し、トレーサビリティのために印刷されたとおりの値も保持します。エクスポート時に、各チャネルが想定する単位(たとえばShopifyのProduct CSVの重量ならグラム)に変換します。
- GS1 GPC、ETIM、Shopifyの分類体系のうち、どれを使うべきですか?
- 取引先やチャネルが求めるものを使い、多くの場合は複数使うことになります。自社の属性スキーマをマスターとして維持し、小売のデータ交換にはGPC、技術系の卸売にはETIM、Shopifyストアには ShopifyのStandard Product Taxonomyへのマッピングを管理します。
- 属性抽出の品質はどのように測定しますか?
- 抽出したレコードのサンプルを元の文書と項目ごとに照合し、属性ごとに、正しい値、誤った値、欠落した値を別々に数えます。誤った値は適合率の問題を、欠落した値は再現率の問題を示します。両方をサプライヤーごとに追跡してください。
- 複数の言語で商品属性を扱うには?
- 色や素材などの列挙値は、言語に依存しないコードとして保存し、ラベルを翻訳します。数値と単位コードは言語に依存しない形にします。自由記述の属性は、言語ごとに翻訳とレビューが必要です。
公式資料
このガイドで参照している法令の原文と公式ガイダンスです。
本ガイドは一般的な情報提供を目的としたものであり、法的助言ではありません。要件は製品や市場によって異なります。公式の法令原文をご確認のうえ、個別の状況については専門家にご相談ください。