NLP:マルチワードトークン化によく使用されるパッケージは何ですか?


7

いくつかの職務説明テキストをトークン化するつもりです。空白を区切り文字として使用して、標準のトークン化を試しました。しかし、空白で分割された複数の単語の表現がいくつかあり、それが後の処理で精度の問題を引き起こす可能性があることに気付きました。だから私はこれらのテキストで最も興味深い/有益なコロケーションをすべて取得したいと思います。

特定のプログラミング言語に関係なく、複数単語のトークン化を行うための優れたパッケージはありますか?たとえば、「彼は情報技術を研究しています」===>「彼」「研究」「情報技術」。

NLTK(Python)にはいくつかの関連機能があることに気づきました。

これら2つの違いは何ですか?

nltk.tokenize.mweモジュールのMWETokenizerクラスは、私の目的に向かって機能しているようです。ただし、MWETokenizerでは、複数の単語の式を追加するために、その構築メソッドと.add_mweメソッドを使用する必要があるようです。これを達成するために外部のマルチワード式レキシコンを使用する方法はありますか?もしそうなら、マルチワードの辞書はありますか?

ありがとう!

回答:


2

マルチワードトークナイザー 'nltk.tokenize.mwe'は基本的に、APIドキュメントから私が理解したことから、レキシコンに基づいてすでにトークンに分割された文字列をマージします。

できることの1つは、すべての単語をトークン化し、それに関連する品詞(PoS)タグを付けてから、PoSタグに基づいて正規表現を定義し、興味深いキーフレーズを抽出することです。

たとえば、NLTKブックの第7章このブログの投稿を基にした例

def extract_phrases(my_tree, phrase):
   my_phrases = []
   if my_tree.label() == phrase:
      my_phrases.append(my_tree.copy(True))

   for child in my_tree:
       if type(child) is nltk.Tree:
            list_of_phrases = extract_phrases(child, phrase)
            if len(list_of_phrases) > 0:
                my_phrases.extend(list_of_phrases)

    return my_phrases



def main():
    sentences = ["The little yellow dog barked at the cat",
                 "He studies Information Technology"]

    grammar = "NP: {<DT>?<JJ>*<NN>|<NNP>*}"
    cp = nltk.RegexpParser(grammar)

    for x in sentences:
        sentence = pos_tag(tokenize.word_tokenize(x))
        tree = cp.parse(sentence)
        print "\nNoun phrases:"
        list_of_noun_phrases = extract_phrases(tree, 'NP')
        for phrase in list_of_noun_phrases:
            print phrase, "_".join([x[0] for x in phrase.leaves()])

PoSタグの正規表現に基づいて文法を定義しました。

grammar = "NP: {<DT>?<JJ>*<NN>|<NNP>*}"
cp = nltk.RegexpParser(grammar)

次に、それをトークン化されタグ付けされた文に適用して、ツリーを生成します。

sentence = pos_tag(tokenize.word_tokenize(x))
tree = cp.parse(sentence)

次に、を使用extract_phrases(my_tree, phrase)してツリーを再帰的に解析し、NPのラベルが付いたサブツリーを抽出します。上記の例では、次の名詞句が抽出されます。

Noun phrases:
(NP The/DT little/JJ yellow/JJ dog/NN) The_little_yellow_dog
(NP the/DT cat/NN) the_cat

Noun phrases:
(NP Information/NNP Technology/NNP) Information_Technology

興味深いキーフレーズを抽出する多くの方法について、Burton DeWildeによる素晴らしいブログ投稿があります:自動キーフレーズ抽出の概要


1

複数の単語に興味がある場合でも、トークン化プロセスを変更しないでください。結局のところ、単語はまだ基本的なトークンです。適切な単語を用語に組み合わせる方法を見つけるために何をすべきか。

そのための簡単な方法は、用語の確率が独立したトークンの確率よりも高い用語を探すことです。たとえば、P( "ホワイトハウス")> P( "ホワイト")* P( "ハウス")必要リフトの適切な値の選択、発生数、および用語分類は、ドメインから用語のデータセットがある場合に推定できます。 。このようなドメインがない場合、少なくとも10回の出現と最低2回のリフトの要件(通常、各トークンの確率が低いため、はるかに高くなります)は非常にうまく機能します。

あなたのケースでは、ドメインに関連するコンテキストを組み合わせることによって用語を抽出することもできます(たとえば、「研究されたX」、「実践されたY」)。

繰り返しますが、そのための複雑でエレガントなモデルを構築できますが、通常、コンテキストインジケーターの後にいくつかの次の単語を探すことは非常に有益です。


1

あなたの問題では、gensimは非常に便利だと思います。Gensimライブラリで実装できるのはフレーズ検出です。これはn-gramに似ていますが、ウィンドウをスライドしてすべてのn-gramを取得する代わりに、頻繁に使用されるフレーズを検出してそれらを貼り付けます。それは統計的にテキストコーパスをウォークスルーし、一般的な並べて出現する単語を識別します。
以下は、最適なマルチワードトークンを計算する方法です。 ここに画像の説明を入力してください

以下は、それを使用するコードです。2つの単語トークンを計算します。

from gensim.models.phrases import Phrases, Phraser

tokenized_train = [t.split() for t in x_train]
phrases = Phrases(tokenized_train)
bigram = Phraser(phrases)

これはあなたがそれを使う方法です

ここに画像の説明を入力してください

「new_york」という単語が連結されていることに注目してください。コーパスでは、「new」と「york」の両方の単語が一緒になっているという統計的証拠が有意だったためです。

さらに、これはバイグラムだけでなく、nグラムまで作成できます。詳細はこちらの記事をご覧ください


0

MultiWord Expressions(MWE)をキャプチャするためのStanford CoreNLPのこの拡張は、私のタスクの1つの魅力のように機能しました。Pythonユーザーの場合は、コネクターコードを作成するか、Javaコードをハックする準備をします。



0

マルチワードのトークン化には、Stanford CoreNLPライブラリを使用します。私が同様のタスクに取り組んでいたときにそれを見つけました、そしてそれはかなりうまくいきました!

更新:マルチワードのトークン化モデルを含むStanford CoreNLPパイプラインを使用できます。独自のデータでニューラルネットワークをトレーニングするためのデモのリンクはこちら


小さなコードスニペットを追加して、OPに使用方法を知らせることもできます。
Tasos、

はい。ただし、使用方法と独自のデータでトレーニングする方法の詳細については、上記のリンクを参照してください。また、マルチワードトークン化のモデルをトレーニングするためのデモを提供する特定のリンクを追加しました
Noman

リンクオンの回答は、さまざまな理由で避けられるのが一般的です。たとえば、ページのコンテンツが変更されたり、リンクにアクセスできなくなったりする可能性があります。新しいユーザーがこのページにアクセスすると、OPが要求した情報を取得できるはずです。ベストプラクティスと同じように。
Tasos、

ああ、指摘してくれてありがとう。CoreNLP mwtモデルを使用するためのコードを見つけようとするか、コミュニティの情報のために、再度コード化してここに(数日で)貼り付けます!
ノーマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.