2017-01-19 3 views
0

CRF ++を使用して製品の文字列をさまざまな属性クラスに解析して、this questionのような製品の一致を実行しようとしています。CRF ++のテンプレートファイルとセンテンスの構文

しかし、私が問題に遭遇しているところでは、CRFは、製品文字列内の単語の順序がまだトレーニングファイルに表示されていない場合、タグを正確に予測していません。このトレーニングを使用している場合

panasonic NOUN B-BRAND 
digital ADJ B-PRODUCT 
monitor NOUN I-PRODUCT 
17 # B-SIZE 
inch # I-SIZE 

:次の例では、トレーニングデータを含む

#Unigrams 
U00:%x[-1,0] 
U00:%x[0,0] 
U00:%x[1,0] 

#Bigrams 
B 

そして私はcrf_learnを実行します。例として

は、私は単に袋のワードテンプレートファイルを使用していますデータでは、モデルは正しく "パナソニックデジタルモニター17インチ"というテスト文字列を正しい出力タグとして解析します。しかし、モデルを "panasonic monitor digital 17 inch"のような文字列で使用すると、モデルは正しいタグ付けを認識せず、代わりに 'digital'と 'monitor'のタグを次のように変更します。

私は必要なもの
panasonic NOUN B-BRAND 
monitor NOUN B-PRODUCT 
digital ADJ I-PRODUCT 
17 # B-SIZE 
inch # I-SIZE 

は、しかし、次のとおりである。

panasonic NOUN B-BRAND 
monitor NOUN I-PRODUCT 
digital ADJ B-PRODUCT 
17 # B-SIZE 
inch # I-SIZE 

は、これが私のテンプレートファイルの問題ですか、CRFは、本質的に構文制限のですか?あるいは、テンプレートファイルやトレーニングデータの列を修正して、プロダクト文字列内の単語の順序を取得/無視することはできますか?

答えて

0

まず、テンプレートファイルでフィーチャ定義が間違っています。

すべてのフィーチャテンプレートは、U00と識別されています。それが唯一の1機能ではなく、3

第二には、基本的にあります、私はあなたがより多くのフィーチャテンプレート、例を試してみてくださいだと思う意味:

#context of 3 words 
U00:%x[-1,0] 
U01:%x[0,0] 
U02:%x[1,0] 

#for POS Tag 
U03:%x[0,1] 

希望これは、パフォーマンスの向上に役立ちます:)

PS: CRF ++テンプレートファイルについては、https://youtu.be/GJHeTvDkIaEをご覧ください。