質問応答システムを開発するために、マラヤーラム語 (インド語) のテキスト コーパスを解析したいと考えています。英語以外の言語のセマンティック解析用の NLP ツールはありますか?
2 に答える
これは大きくて恐ろしく聞こえるかもしれません。
私の知る限り、たとえ文書化されていたとしても、学習できるフリー ソフトウェアの質問/応答システムはありません。
質問応答には 2 つの部分があります。
- 質問を理解する
- 前処理されたデータセット ( wikidata.org など)で応答を検索する
どちらの手順でも同様のアルゴリズムが必要です。
縦型質問応答パイプライン
縦型の質問応答システムを実装するには、「マラヤーラム語」やその他のインドの言語を高レベルで解析できる必要があります。これは、少なくとも次のことを意味します。
テキストを段落に分割し、次に文と単語に分割します。文がどこで終わるかを知ることができなければなりません。たとえば、言語によっては、文が同じ文字で終わらない場合があります。または略語。like
ie.
は文末ではありません。I.B.M.
英語には大文字がありますが、すべての大文字が固有名詞のように文を開始するわけではありません。たとえば、「チョムスキーは生きていますか?」などです。音声タグ付けの一部: 名詞、固有名詞から、動詞から、などを伝えます。
Named Entity Recognizerの作成: 人、組織、場所、時間の表現、数量、金額、パーセンテージなどの名前を識別します。
セマンティック ツリーの依存関係を構築します。たとえば、"she" または "he" が参照する名前付きエンティティはどれですか? 文の主語、補語など
テキスト生成ツールを作成します。あなたのプログラムが質問を理解していることを考えると、自然言語でフォーマットしなければならない可能性のある答えが見つかりました。
幸いなことに、あなたがインスピレーションを得る英語でそれを行うための例に事欠きません。Python で作業したい場合は、Spacy (高速で最新の NLP ライブラリになりたい) と本に付属のNLTKを学習する必要があります。
言語間でアルゴリズムを共有できます。
より狭いアプローチ
すべての手順を実行するのではなく、質問に答えるサブ問題のみを解決する場合。問題を単純化し、変数/不明を排除する必要があります:
SQL クエリを実行して簡単に質問に回答できるように、分割済みでタグ付けされたファクトを含むデータベースを構築する必要があります。たとえば、次のファクト タプルがあるとします。
誰が:インド 何を:勝つ 何を:クリケット選手権 いつ:2015
WHO
ここでは、 、WHEN
、としてタグ付けを簡略化していWHAT
ます。
質問に答えるのは簡単です:
WHO:?何を:勝つ 何を:クリケット選手権 いつ:2015
すなわち。
2015年のクリケット選手権で優勝したのは?
繰り返しになりますが、質問は「予測可能」で、他の例を簡単に解析できる必要があります。
誰がいつ何をした
何が何
いつ 何 誰
WHO
これは、 a 、 aを認識/解析し、ユーザーが提供した文WHEN
の a が何であるかを推測できる場合に機能します。また、さらに単純化して、 s は 4 桁しかないWHAT
と言うこともできます。WHEN
年。さらに、解析部分を簡素化するために、質問の種類を制限します。
これにより、生の ElasticSearch や PostgreSQL のような情報検索 (IR) システムよりも自然で正確な方法で実際に質問に答えることができるプログラムにたどり着きます。
事実データベース
おそらく、無料の ConceptNet (ヘルプが必要な場合やインド語のウィクショナリーに貢献したい場合は、メーリング リストにメッセージを送信してください) またはbabelnetを参照して、セマンティック ネットワークで作業する必要があります。ワードネットもあります。
コース
私はJurafskyのコースがとても気に入りました.QAに関する特定の章があります. Jurafsky は、NLP の完全な入門書を書きました。
検索のヒント
World Wide Web で、探している言語の NLP アルゴリズムに関する情報を検索してください。フランスのレンマタイザーの場合、私はフランスの研究ポータルで検索するか、ネイティブの ie. フランス語の文言。アメリカの検索エンジンは、英語以外の言語ではそれほど優れていないため、ページネーションの準備をしてください (検索ツールも使用してください)。
文化
自然言語処理と人工知能に関する優れた文化を構築します。要約や情報検索(簡単ですが)を見て、別の問題で再利用できる方法を学びます。たとえば、ルールベースの機械翻訳を見ると、業界では、ドキュメントを正確に翻訳できるように、単純化された曖昧でない自然言語文法が使用されていることがわかります。これらのドキュメントは簡単な英語 (例: SUBJECT VERB NOUN
) で書かれているため、コンピューターの文法は (コンピューター言語の文法のように) 簡単に作成でき、ほとんどの場合、単語から単語への翻訳も簡単です。これは、サブ問題を解決してより高い品質を実現する例です。これが、上記の狭いアプローチを思いついた方法です。
アルゴリズム
最後になりましたが、ほとんどのサブ問題の解決策は、次の 3 つのアルゴリズム カテゴリのいずれかに分類されます。
代数理論とグラフ理論は、データを理解しようとし、その結果を説明できます。たとえば、PageRank、SimRank、CoSimRank、ロジック プログラミング。
基本的に「問題は解決されたが、その理由がわからない」という熱力学と比較した統計。これは「機械学習」と呼ばれるもので、NLP に比べて実際には狭い問題を解決するために業界で主に使用されています。しかし、トピックモデリングなどの自然言語の問題を解決するための機械学習アルゴリズムはまだ存在していますが、それが唯一の例ではありません。統計計画法が人気です。
ハイブリッド: 両方の方法の混合を意味します。
チョムスキーと統計学習の 2 つの文化を読んで、二分法と研究/工学の背景についての洞察を深めてください。
一般的なヒント
それらの制限とその使用方法を理解していれば、すべてのアルゴリズムと科学的根拠を知って理解する必要はありません。
主に英語を読んでいても、私の「母国語」であるフランス語を読むと、私の理解が広がります。
見つけた書類やリソースを保存しておいてください。物事は行き来します。
英語以外の言語用のセマンティック パーサーを探していたとき、2 つの大きな問題に直面しました。セマンティック アノテーション付きトレーニング データと、FrameNet のようなセマンティック データベースを見つけることです。
人気のある言語であっても、FrameNet の適切な代替品を見つけることは事実上不可能であるため、あなたの場合、これは検討の対象外であると思われます。
1 つの可能性は、セマンティック ロールのラベル付けを使用することです。この浅いセマンティック解析は、実際のセマンティック パーサーほど詳細ではありませんが、おそらく正しい方向への一歩です。私が知っている SRL パーサーは英語そのものではなく、既に訓練された英語用の言語モデルが付属しています。したがって、最大の課題は、そのようなモデルを自分の言語用にトレーニングすることであり、そのためにはセマンティック アノテーションを含む大規模なコーパスが必要になります。ここには複数の言語で利用できるコーパスがあるため、ほとんどのパーサーはこのデータを CoNLL 形式で必要とします。
mate-tools
主に依存関係の解析に焦点を当てていますが、トレーニング可能なセマンティック ロール ラベラーも含まれています。これらは C++ で書かれたスタンドアロンのツールであるため、それらをプログラムに統合したい場合は、いくつかのシェル スクリプトのツールチェーンを構築する必要があるかもしれません。
ClearNLP
mate-tools とは異なり、ClearNLP は Java ライブラリとして使用でき、プロジェクトも活発に開発されています。また、比較的新しい機能である新しい SRL モデルのトレーニングもサポートしています。
あなたの言語の意味注釈付きコーパスを作成する時間とリソースがあるとは思えないので、考えられる回避策は、非常に優れた機械翻訳システムを使用してコーパスを英語に翻訳し、意味解析を適用することです。このアプローチは非常にエラーが発生しやすいため、たとえ時間のかかる作業であっても、翻訳された出力を修正することを強くお勧めします。
現在、SEMAFORパーサー ( GitHub ) を使用しています。Java で書かれており、事前にトレーニングされた英語用のモデルが付属しており、読みやすい XML ファイルで FrameNet 注釈を作成します。(現在のすべてのセマンティック パーサーと同様に) 完全にはほど遠いですが、操作できる出力が作成されます。それを使用する場合は、コンパイル済みの jar を無視して、GitHub ページから最新のコードをダウンロードすることをお勧めします。
これが完璧な解決策ではないことはわかっていますが、私が選択する最速で最も信頼性の高い方法です。