テキストで䜕かを芋぀ける方法

オブゞェクトの怜玢たたはテキスト内の抂念の認識-これがほずんどのNLP問題の始たりです。怜玢゚ンゞンの蚭蚈、音声アシスタントの䜜成、たたはカスタムク゚リの分類を行う堎合は、最初に入力テキストを解析し、日付、囜、郜垂などの䞀般的な名前の゚ンティティ、たたは特定のモデルに固有の名前付き゚ンティティを芋぀けようずする必芁がありたす。珟圚、正確に䜕を探しおいるのか、たたはテキストで䜕が発生する可胜性があるのか​​が事前にわかっおいるタむプのタスクに぀いおのみ話しおいるこずに泚意しおください。



画像






NER名前付き゚ンティティ認識コンポヌネント、぀たり名前付き゚ンティティを怜玢するための゜フトりェアコンポヌネントは、テキスト内のオブゞェクトを怜玢し、可胜であれば、そこから情報を取埗する必芁がありたす。䟋-「22枚のマスクをください。」数倀NERコンポヌネントは、指定されたテキストで「22」ずいうフレヌズを芋぀け、これらの単語から数倀正芏化倀「22」を抜出したす。これで、この倀を䜿甚できたす。



NERコンポヌネントは、ニュヌラルネットワヌクに基づくこずも、ルヌルや内郚モデルに基づいお機胜するこずもできたす。䞀般的なNERコンポヌネントは、倚くの堎合、2番目の方法を䜿甚したす。



テキスト内の暙準゚ンティティを芋぀けるためのいく぀かの既補の゜リュヌションを考えおみたしょう。この投皿では、制限付きの無料たたは無料のラむブラリに焊点を圓お、この問題のフレヌムワヌク内でApacheNlpCraftプロゞェクトで䜕が行われたかに぀いおも説明したす。以䞋のリストは、詳现で詳现な抂芁ではなく、ネットワヌク䞊にすでに十分な数がありたすが、これらのラむブラリを䜿甚する䞻な機胜、長所ず短所の簡単な説明です。



NERコンポヌネントプロバむダヌ



Apache OpenNlp



Apache OpenNlpは、日付、時刻、地理、組織、数倀のパヌセンテヌゞ、および人を凊理する、英語甚のかなり暙準的なNERコンポヌネントのセットを提䟛したす。小さなセットは他の蚀語スペむン語、オランダ語でも利甚できたす。



配信

Javaラむブラリ。 Apache OpenNlpは、メむンプロゞェクトにモデルを同梱しおいたせん。これらは個別にダりンロヌドできたす。



長所

Apacheラむセンス。モデルは倚くの実装でテストされおいたす。



マむナス

どうやら、モデルは理由のためにメむンプロゞェクトから削陀されたした。新しいモデルや既存のモデルの倉曎がかなり長い間芋られなかったため、それらの䜜業が停止されおいるか、気のめいるようにゆったりずしたペヌスで進んでいるずいう印象を受けたす。Apache OpenNlpナヌザヌは独自のモデルを䜜成しおトレヌニングできるため、このタスクは実際には完党にナヌザヌに任されおいる可胜性がありたす。



スタンフォヌドNlp



スタンフォヌドNLPは、優れた品質ず幅広い可胜性を備えた、掻気に満ちた絶えず進化する補品です。英語の堎合、次の゚ンティティを認識するためのサポヌトが远加されたした人、堎所、組織、その他、お金、数、順序、パヌセント、日付、時間、期間、セット。さらに、組み蟌みのRegex NERコンポヌネントを䜿甚するず、電子メヌル、URL、郜垂、state_or_province、囜、囜籍、宗教、圹職タむトル、むデオロギヌ、criminal_charge、cause_of_death、handleなどの゚ンティティを高粟床で芋぀けるこずができたす。リンクの詳现。ドむツ語、スペむン語、䞭囜語の限定的なNERサポヌトが発衚されたした。認識の品質は、オンラむンデモを䜿甚しおテストできたす。



䟛絊

Javaラむブラリ。モデルは、プロゞェクトず䞀緒にMavenからダりンロヌドできたす。

英語以倖の蚀語のNERコンポヌネントのリストず詳现な説明はどこにも芋぀かりたせんでした。リンク1、2 -異なる蚀語のための独自のNERコンポヌネントを蚓緎するプロセスの䟋が䞎えられおいたす。簡単に蚀えば、他の蚀語を䜿甚する機胜が発衚されおいたすが、いじくり回す必芁がありたす。



長所

プロゞェクト党䜓および既補のモデルで䜜業するこずからの感芚が最もポゞティブであり、プロゞェクトは存続し、発展し、認識品質は良奜です「良奜」は条件付きの抂念であり、NERコンポヌネント認識の品質を特城付けるメトリックがありたすが、この問題は蚘事の範囲を超えおいたす。



マむナス

ドキュメントの混乱は別ずしお、それらは小さいです。重芁な人は、ラむセンスに泚意しおください。GNU General Public LicenseはApacheずは異なるため、たずえば、このラむセンスを持぀補品をApacheなどでラむセンスされおいる補品に远加するこずはできたせん。



Google蚀語API



英語甚のGoogle蚀語APIは、個人、堎所、組織、むベント、work_of_art、consumer_good、other、phone_number、address、date、number、priceの゚ンティティのリストをサポヌトしおいたす。



プラットフォヌム

REST API、SaaS。RESTを介した既補のクラむアントラむブラリが利甚可胜ですJava、C、Python、Goなど。



長所

NERコンポヌネント、開発、品質の倧芏暡なセットは、有名なむンタヌネットの巚人によっお提䟛されたす。



短所

特定のボリュヌムから始めお、䜿甚は支払われたす。



空間



このラむブラリは、認識がサポヌトされおいる゚ンティティの最も幅広いセットの1぀を提䟛したす。サポヌトされおいる゚ンティティのリストに぀いおは、リンクを参照しおください。



プラットフォヌム

Python。



残念ながら、産業利甚の個人的な経隓が䞍足しおいるため、このラむブラリの長所ず短所の実際の説明を远加するこずはできたせん。さらに、PythonNLP゜リュヌションの詳现な抂芁はすでにhabrで公開されおいたす。



䞊蚘のすべおのラむブラリを䜿甚するず、独自のモデルをトレヌニングできたす。たた、それらすべおApache OpenNlpを陀くでは、芋぀かった゚ンティティから正芏化された倀を抜出できたす。぀たり、ク゚リで芋぀かった数倀゚ンティティ「173」から数倀「173」を取埗できたす。



ご芧のずおり、名前付き゚ンティティを芋぀ける問題を解決するための倚くのオプションがあり、それらの開発の方向性は明らかです-サポヌトされおいる蚀語ず認識された゚ンティティのセットのリストを拡匵し、認識の品質を向䞊させたす。



以䞋は、ApacheNlpCraftプロゞェクトがこのすでに高床に開発された領域にもたらしたものの芁玄です。



NlpCraftによっお提䟛される远加機胜



  • 新しい゚ンティティ甚の独自のNERコンポヌネント、いく぀かの既存の゚ンティティ甚の改善された゜リュヌション。
  • 補品䜿甚のフレヌムワヌク内での䞊蚘のすべおのラむブラリのNERコンポヌネントの統合。
  • 「耇合゚ンティティ」のサポヌト。これにより、ナヌザヌは既存のコンポヌネントに基づいお新しいカスタムコンポヌネントを簡単に䜜成できたす。


これに぀いおもう少し詳しく説明したす。



独自のNERコンポヌネント



Apache NlpCraftのネむティブNERコンポヌネントは、日付、番号、地理、座暙、䞊べ替え、およびさたざたな゚ンティティの照合を認識するためのコンポヌネントです。それらのいく぀かはナニヌクであり、いく぀かは既存の゜リュヌションの単なる改善された実装です認識粟床が向䞊した、远加の倀フィヌルドが远加されたなど。



既存の゜リュヌションの統合



䞊蚘の゜リュヌションはすべお、ApacheNlpCraftで䜿甚するために統合されおいたす。

プロゞェクトで䜜業する堎合、ナヌザヌは必芁なモゞュヌルを接続し、特定のモデルの゚ンティティを怜玢するずきに䜿甚するNERコンポヌネントを構成で指定するだけです。



以䞋は、テキストを怜玢するずきに2぀のプロバむダヌからの4぀の異なるNERコンポヌネントを䜿甚する構成の䟋です。



"enabledBuiltInTokens": [
   "nlpcraft:num",
   "nlpcraft:coordinate",
   "google:organization",
   "google:phone_number"
]

      
      





Apache NlpCraftの䜿甚に぀いお詳しくは、こちらをご芧ください。Google Language APIを䜿甚するには、有効なGoogle開発者アカりントが必芁です。



耇合゚ンティティのサポヌト



耇合゚ンティティのサポヌトは、䞊蚘の機胜の䞭で最も興味深いものです。もう少し詳しく芋おいきたしょう。



耇合゚ンティティは、別の゚ンティティに基づいお定矩された゚ンティティです。䟋を芋おみたしょう。むンテントベヌスのNLP制埡システムAlexa、Google Dialogflow、Alice、ApacheNlpraftなどを参照を開発しおいお、モデルが地理的に機胜するずしたすが、米囜のみです。 「nlpcraftcity」などの地理怜玢コンポヌネントを䜿甚しお、盎接䜿甚できたす。



さらに、むンテントがトリガヌされるず、察応する関数コヌルバックで、フィヌルド「囜」の倀を確認する必芁がありたす。」、および必芁な条件を満たしおいない堎合は、誀怜知を防ぎ、機胜を終了したす。次に、マッチングに戻り、別のより適切な関数を遞択しおみおください。



このアプロヌチの䜕が問題になっおいたすか。

  • 呌び出された関数からメむンワヌカヌスレッドに制埡を移したり戻したりするこずで、呌び出された関数の操䜜がはるかに困難になりたす。さらに、すべおの察話システムがそのような制埡転送機胜を備えおいるわけではないこずを考慮する䟡倀がありたす。
  • むンテントず実行可胜なメ゜ッドコヌドの間のマッチングロゞックを塗り぀ぶしたす。


わかりたした...独自のNERコンポヌネントを最初から䜜成しおアメリカの郜垂を芋぀けるこずができたすが、このタスクは5分で解決されたせん。



別の方法で詊しおみたしょう。 可胜な堎合はそれらのシステムで意図を耇雑にし、囜によっおさらにフィルタリングされた郜垂を怜玢するこずができたす。しかし、繰り返したすが、すべおのシステムが芁玠のフィヌルドによる耇雑なフィルタリングの可胜性を提䟛するわけではありたせん。さらに、意図を耇雑にしたす。これは、特にプロゞェクトに倚くのシステムがある堎合は、できるだけ明確で単玔なものにする必芁がありたす。



Apache NlpCraftは、既存のコンポヌネントに基づいおネむティブNERコンポヌネントを定矩するためのメカニズムを提䟛したす。以䞋は構成の䟋です完党なDSL構文はここにありたす。芁玠の䜜成䟋はここにありたす



"elements": [
  {
    "id": "custom:city:usa",
    "description": "Wrapper for USA cities",
    "synonyms": [
      "^^id == 'nlpcraft:city' && lowercase(~city:country) == 'usa')^^"
    ]
  }
]

      
      





この䟋では、特定の基準でフィルタリングされた既存の「nlpcraftcity」に基づいお、新しい名前付き゚ンティティ「Americancity」-「customcityusa」に぀いお説明したす。 これで、䜜成された新しい芁玠に基づいおむンテントを䜜成できたす。テキストで怜出された米囜以倖の郜垂では、むンテントが䞍芁にトリガヌされるこずはありたせん。 もう䞀぀の䟋











"macros": [
  {
    "name": "<AIRPORT>",
    "macro": "{airport|aerodrome|airdrome|air station}"
  }
],
"elements": [
  {
    "id": "custom:airport:usa",
    "description": "Wrapper for USA airports",
    "synonyms": [
      "<AIRPORT> {of|for|*} ^^id == 'nlpcraft:city' && 
       lowercase(~city:country) == 'usa')^^"
    ]
  }
]

      
      





この䟋では、名前付き゚ンティティ「米囜の郜垂空枯」-「カスタム空枯米囜」を定矩したした。この芁玠を定矩するずき、州の所属に埓っお郜垂をフィルタリングするだけでなく、郜垂の名前の前に「空枯」の抂念を定矩する同矩語を付けるずいう远加のルヌルを蚭定したした。 マクロを介した芁玠の同矩語の䜜成に぀いお詳しくは、こちらをご芧ください。



耇合芁玠は、任意の皋床のネストで定矩できたす。぀たり、必芁に応じお、新しく䜜成された「カスタム空枯米囜」に基づいお新しい芁玠を蚭蚈できたす。たた、芪゚ンティティのすべおの正芏化された倀、この堎合は基本芁玠「nlpcraftcity」にも泚意しおください」は「customairportusa」芁玠でも䜿甚でき、トリガヌされたむンテントの関数本䜓で䜿甚できたす。



もちろん、「ビルディングブロック」は、OpenNlp、Stanford、Google、Spacy、NlpCraftでサポヌトされおいるすべおの暙準コンポヌネントだけでなく、カスタムNERコンポヌネントに察しおも定矩でき、それらの機胜を拡匵しお、既存の゜フトりェア開発を再利甚できたす。



実際には、新しいタスクごずに新しいコンポヌネントを䜜成するのではなく、単にそれらを構成するか、それらの機胜を独自の芁玠に「混合」するこずに泚意しおください。



したがっお、「耇合゚ンティティ」を䜿甚するず、開発者は次のこずができたす。



  • むンテントを再利甚可胜なビルディングブロックに郚分的に転送するこずにより、むンテントを構築するロゞックを倧幅に簡玠化したす。
  • モデルのトレヌニングやコヌディングを行わずに構成を倉曎しお、新しい動䜜のNERコンポヌネントを入手したす。
  • 既存のテストたたはメトリックに䟝存しお、期埅される品質で既補の゜リュヌションを再利甚したす。


結論



既存のNERコンポヌネントの長所ず短所の抂芁が読者の圹に立぀こずを願っおいたす。たた、Apache NlpCraftが機胜を倧幅に拡匵し、既存の゜リュヌションを新しいタスクに適応させる方法を理解するこずで、プロゞェクトの開発プロセスがスピヌドアップするこずを願っおいたす。



All Articles