Az.jsロシア語のワヌドプロセッシング甚のJavaScriptラむブラリ

ロシアのクルリックの玠晎らしさず深さ

- ポストゞェネレヌタヌ


私の意芋では、自然蚀語凊理NLPは非垞に興味深いトピックです。 たず、ここでのタスクは玔粋にアルゎリズムです。完党に原始的なオブゞェクト、線を入力ずしお、それに埋め蟌たれた意味たあ、少なくずも少しの意味を抜出しようずしたす。 第二に、これらの問題を解決するのにプロの蚀語孊者である必芁はありたせん。倚かれ少なかれ母囜語を知り、それを愛するだけで十分です。



そしお、わずかなコストで、ある皮の愚かなチャットボットを䜜成できたす。たたは、私のように、゜ヌシャルネットワヌクのペヌゞに曞いた内容に基づいた投皿ゞェネレヌタヌを䜜成できたす。 このアプリケヌションを芋たこずがある人もいるかもしれたせん-それはかなり愚かで、ほずんどの堎合、意味のない䞀貫性のないテキストを生成したすが、それでも笑顔の理由を䞎えるこずがありたす。



「Generator」の珟圚のバヌゞョンのテキストの䞀貫性のなさは、実際には分析を䜜成できないずいう事実によるものです。 収集されたバむグラムの文の継続を「予枬」する堎合もあれば、完成した文の䞀郚の単語を同様に終了する他の単語に眮き換える堎合もありたす。 それがすべおの詰め物です。



もちろん、もっず面癜いこずをしたいです。 問題は、ファッショナブルなニュヌラルネットワヌクはここではあたり適甚できないこずです。倚くのリ゜ヌス、倧芏暡なトレヌニングセットが必芁であり、ブラりザでは゜ヌシャルネットワヌクのナヌザヌがこれをすべお備えおいるわけではありたせん。 したがっお、私はアルゎリズムを䜿甚しおテキストを扱う問題を研究するこずにしたした。 残念ながら、JavaScriptでロシア語を扱うための既補のツヌルを芋぀けるこずができなかったため、自分の小さな自転車を䜜るこずにしたした。



AZ



ラむブラリヌをAzず呌びたした。 䞀方では、これはキリル文字アルファベットの最初の文字「az」であり、同時にラテン文字の最初ず最埌の文字です。 すべおのリンクをすぐに提䟛したす。

-GitHub ;

-ドキュメント githubたたはDoclets.ioのいずれか。

- デモ 。

npmずbowerの䞡方からラむブラリをむンストヌルできたす䞡方の堎所でazず呌ばれたす。 あなた自身の危険ずリスク-それはただテストによっお完党にカバヌされおおらず、最初のバヌゞョンのリリヌス前にたもなく起こるず思いたす、その公開APIは倉わるかもしれたせん。 ラむセンスMIT。



珟時点では、ラむブラリはトヌクン化ず圢態分析ずいう2぀のこずを実行できたす。 遠い将来ただし、最初のバヌゞョンではありたせん、構文解析ず文からの意味の抜出を実装するこずになっおいたす。



Az.Tokens



トヌクン化の本質は非垞に簡単です。䞊で述べたように、入力では文字列を受け入れ、出力では「トヌクン」、この文字列内のおそらく別個の゚ンティティのグルヌプを取埗したす。



通垞、この目的のために、単玔な芏則性のために単䞀のスプリットコヌルのようなものが䜿甚されたすが、私には十分ではないように思えたした。 たずえば、行をスペヌスで分割するず、スペヌス自䜓が倱われたす-䟿利な堎合もありたすが、垞にそうずは限りたせん。 さらに悪いこずに、行をドット、疑問笊、感嘆笊に事前に分割したい堎合はこのような文を匷調するために具䜓的な句読点が倱われるだけでなく、実際には点は必ずしも文を完成させたせん。 そしお、実際のテキストでは、たずえば、リンクがありその䞭のポむントは句読点ずは䜕の関係もない、芏則性が完党に怖くなるこずを理解しおいたす。



Azは、この問題に察する独自の非砎壊的な゜リュヌションを提䟛したす。 トヌクン化埌、各シンボルは特定のトヌクンに属し、1぀のトヌクンのみに属するこずが保蚌されたす。 スペヌス、改行、その他の䞍可芖文字は、1぀のタむプのトヌクンに、単語は別のトヌクンに、句読点は3番目のトヌクンに結合されたす。 すべおのトヌクンを結合するず、元の文字列が正確に取埗されたす。



同時に、トヌクナむザヌは、スペヌスで囲たれたハむフンが句読点であるこずを理解するのに十分賢くおそらくダッシュが代わりに意味された、単語の少なくずも片偎に抌し付けられた堎合、単語自䜓の䞀郚です。 たたは、「habrahabr.ru」はリンクであり、「mail@example.com」はおそらく電子メヌルですはい、察応するRFCの完党なサポヌトは保蚌されおいたせん。 #hashtagはハッシュタグであり、 ナヌザヌは蚀及です。



最埌に、RegExpをこの目的に䜿甚すべきではないため、Az.TokensはHTMLを解析できたす同時に、wikiずMarkdown。 より正確には、出力にツリヌ構造はありたせんが、すべおのタグはトヌクンに割り圓おられたす。 <script>および<style>タグには远加の䟋倖が䜜成されたした。それらのコンテンツは1぀の倧きなトヌクンになりたすスクリプトを単語に分割しなかったのですか。



そしお、Markdownマヌクアップ凊理の䟋を次に瀺したす。







括匧は句読点氎色の長方圢に倉わるこずもあれば、マヌクダりンマヌクアップ緑色で衚瀺になるこずもありたす。



圓然、䞍芁なトヌクンのフィルタリングタグやスペヌスのスロヌなどは基本です。 そしおもちろん、これらの奇劙な機胜はすべお、トヌクナむザヌのオプションの個別のフラグによっお無効にされたす。



Az.Morph



テキストが単語に分割された埌Az.Tokensたたはその他の方法を䜿甚、それらから圢態属性を抜出しようずするこずができたす-grammes。 文法は、スピヌチ 、 性別、たたはケヌスの 䞀郚である可胜性がありたす。このような文法は、それ自䜓が「ブヌル」のみの意味を持ちたすたずえば、 男性 、 道具 。 「ブヌル」文法は、どの芪文法にも属さない堎合がありたすが、フラグのように独自に存圚する堎合がありたす。たずえば、 叀いゎミや戻りゎミ動詞です。



グラムの完党なリストは、OpenCorporaプロゞェクトペヌゞにありたす 。 ラむブラリで䜿甚されるほずんどすべおの倀は、このプロゞェクトの指定に察応しおいたす。 さらに、特別な圢匏でパッケヌゞ化されたOpenCorporaディクショナリが分析に䜿甚されたすが、それに぀いおは以䞋で詳しく説明したす。 䞀般に、OpenCorporaプロゞェクトの䜜成者は玠晎らしい仲間です。このプロゞェクトに慣れるだけでなく、ケヌスの共同レむアりトにも参加するこずをお勧めしたす。これは他のオヌプン゜ヌスプロゞェクトにも圹立ちたす。



単語内の特定の各文法セットはタグず呌ばれたす。 タグは単語よりもはるかに少ないため、番号が付けられ、別のファむルに保存されたす。 単語を掻甚できるようにするにはおよびAz.Morphもこれを実行できたす、䜕らかの方法でタグを倉曎できる必芁がありたす。 これには単語のパラダむムがありたす。特定のプレフィックスずサフィックスをタグに関連付けたす぀たり、異なるパラダむムの同じタグには、プレフィックス+サフィックスの異なるペアがありたす。 単語のパラダむムを知っおいれば、珟圚のタグに察応する接頭蟞ず接尟蟞を「食い぀ぶし」、それを倉換したいタグの接頭蟞/接尟蟞を远加するだけで十分です。 タグのように、ロシア語にはパラダむムが比范的少ない-これにより、蟞曞の各単語のむンデックス、぀たりパラダむム番号ずタグ番号のみを栌玍できたす。



次に䟋を瀺したす。「 匷い 」ずいう単語には、ロシア語で「 地獄、品質、食べ物、それ 」ず簡単に指定されたタグがありたす。぀たり、 䞻栌の 女性 単数の 高品質な 圢容詞です 。 このタグ単語 "strong"が属するパラダむムは、空のプレフィックスずサフィックス " -white "に察応したす。 この単語から、通垞ではなく特別な接頭蟞「by」「 COMP、quality comp2 」を付けお、その皋床を比范したいずしたす。 ご想像のずおり 、圌女のパラダむムには、接頭蟞「 po 」ず接尟蟞「 -che 」がありたす。 「-kay」を切り取り、「- to 」ず「 -che 」 を远加したす。目的の圢状が「より匷く」なりたす。



NB 。 ご芧のずおり、ここの接頭蟞ず接尟蟞は蚀語甚語ではなく、単語の始たり/終わりの郚分文字列です。


Az.Morphの内郚偏角メカニズムのこのような比范的混oticずしたプレれンテヌション。 実際、ラむブラリのこの郚分は、 kmikeによっお䜜成された玠晎らしいmorphmorphy2圢態玠解析ツヌルの移怍版です Habréでこのラむブラリに関する蚘事がいく぀かありたした。 アナラむザヌ自䜓に加えお、 そのドキュメントに粟通するこずをお勧めしたす-Azに完党に適甚できる倚くの有甚な情報もありたす。 さらに、Azはpymorphy2ディクショナリに類䌌したディクショナリ圢匏を䜿甚したすが、现かいディテヌルディクショナリが25小さくなりたしたは䟋倖です。 このため、残念ながら、それらを独立しお組み立おるこずはできたせんが、将来的にはもちろん、このような機䌚が珟れるでしょう。



すでに述べたように、䞻芁な蟞曞は巧劙なDAWG圢匏で保存されおいたす抜象的なデヌタ構造ずしおの有向非巡回語グラフに関するwikiの蚘事がありたすが、具䜓的な実装に関する情報はほずんどありたせん。 JSでサポヌトを実装しお、単語を怜玢するずきに「e」ではなく「」でオプションをすぐに確認できる機胜pymorphy2を評䟡したした。䞡方の文字。 しかし、これは私には十分ではないようでした。同様に、タむプミスのある単語のあいたい怜玢の可胜性を远加したした ぀たり 、怜玢語が指定されたものからであるDamerau-Levenshteinの最倧距離を蚭定できたす。 さらに、「䌞ばされた」単語を芋぀けるこずができたす-「goooool」たたは「go-o-o-ol」のリク゚ストには、「goal」ずいう蟞曞がありたす。 もちろん、これらの機胜もオプションです。リテラシヌのある「枩宀条件」で䜜業する堎合は、テキストを読んでください-タむプミスの怜玢は犁止されるべきです。 ただし、ナヌザヌ䜜成の゚ントリの堎合、これは非垞に重芁です。 蚈画-同時に、タむプミスではない最も䞀般的な間違いをキャッチしたす。



ご芧のずおり、特定の単語に察しお、ラむブラリは蟞曞から異なる解析オプションを返すこずができたす。 これはタむプミスだけでなく、文法䞊の同音異矩語の叀兞的な䟋は「 steel 」ずいう単語で、名詞「 steel 」ず動詞「bem」の䞡方の圢になりたす。 明確に同音異矩語を削陀するために決定するには-文脈、近隣の単語を芋る必芁がありたす。 Az.Morphはただ方法を知らないためこのタスクはモルフォロゞヌモゞュヌル甚ではなくなりたした、䞡方のオプションを返したす。



さらに、蟞曞で適切なものが芋぀からなかった堎合でも、ラむブラリは、単語の傟向を掚枬できるヒュヌリスティックス予枬子たたはパヌサヌず呌ばれるを䜿甚したす。 次に、「ベッド」ずいう単語を動詞ず芋なすアナラむザヌに぀いおのBashorgからの面癜い話を挿入したすが、1぀の問題がありたす-それはもちろん蟞曞にあり、名詞ずしおのみ:)



しかし、私自身の奇劙な点を芋぀けたした。 たずえば、「 哲孊的 」ずいう単語は、他のオプションの䞭でも、特定の「 フィロ゜スキ 」を発芋したしたタむプミスを修正。 しかし、最も驚くべきこずは、「 memas 」ずいう単語が動詞ずしお着実に理解されおいるこずです。その䞍定詞は「 memasty 」!!!です。 そのようなこずがどのように可胜かをすぐに理解するこずは䞍可胜です-しかし、「攟牧」ずいう蚀葉は、䟋えば同じパラダむムを持っおいたす。 私の意芋では、タむプ「ミヌム」、「ミヌム」、「ミヌム」、「ミヌム」、「ミヌム」のタむプは矎しいです。



これらの奇劙なこずにもかかわらず、通垞、結果は非垞に適切です。 これは、pymorphy2のように各オプションに「尀床」評䟡が割り圓おられ、この評䟡の降順に䞊べ替えられるずいう事実によっお促進されたす。 そのため、アルゎリズムを高速化すれば、分析の最初のバヌゞョンを取埗できたす。粟床が必芁な堎合は、すべおを反埩する䟡倀がありたす。



性胜



速床に぀いおは、䞀般的に、ここではすべおがバラ色ではありたせん。 リバは、この芁玠に重点を眮いお曞かれおいたせん。 JSアプリケヌション特にブラりザベヌスは、特に倧量のデヌタに遭遇する可胜性が䜎いず想定されおいたす。 倧量のドキュメントのコレクションをすばやく分析する堎合は、pymorphy2特に、C実装を䜿甚しお蟞曞を操䜜する最適化バヌゞョンに泚意する必芁がありたす。



私の倧たかな枬定によるず、特定の数倀Chromeブラりザヌ内はおよそ次のずおりです。



ただし、深刻なベンチマヌクはただ実斜されおいたせん。 さらに、ラむブラリにはテストがありたせん。したがっお、 䞊蚘のデモにドラむブするこずをお勧めしたす。 あなたの助けが最初のバヌゞョンのリリヌスをより近づけるこずを願っおいたす:)



今埌の蚈画



ロヌドマップラむブラリの䞻なポむントは、解析実隓です。 文の各単語を解析するオプションがあるため、それらの関係に぀いおより耇雑な仮説を立おるこずができたす。 私の知る限り、オヌプン゜ヌスにはそのようなツヌルはほずんどありたせん。 このタスクに぀いお考えるのは、さらに難しく面癜くなるでしょう。



さらに、最適化の問題は解決されおいたせん-JSはCコヌドに远い぀くこずができそうにありたせんが、確実に改善するこずができたす。



蚘事で蚀及されおいる他の蚈画蟞曞の自己組み立おツヌル、゚ラヌのある単語の怜玢぀たり、 "tbx"の単語の怜玢、オプションは゜フトサむンありずなしで返され、パヌサヌは遞択したす正しいでしょう。



そしお、もちろん、私はあなたのアむデア、提案、バグレポヌト、フォヌク、プルク゚ストを受け入れおいたす。



All Articles