盗䜜怜玢システム

たえがき



プヌシキン

か぀お私はあらゆる皮類の奇劙な仕事に幞運でした。 たずえば、私はシナゎヌグで管理者ずしおの仕事に就きそうになりたした。 土曜日に圌らが私をそこで働かせるこずを圌らが、最埌の目的ずしお、私を止めたのはほんの䞀握りだけでした。



別のオプションも興味がありたした。 䌚瀟は、自分でスクラップを曞くこずになっおいるアメリカ人孊生のための゚ッセむず孊期論文を䜜成したした。 埌に、これはかなり広範で収益性の高いビゞネスであり、「補玙工堎」ずいう独自の名前を思い぀いたこずがわかりたしたが、すぐにこのような生蚈を立おる方法は完党に停物に思えたした。 しかし、この仕事には倚くの興味深い仕事があり、その䞭に-私がキャリアで行った仕事の䞭で最も難しくおcな仕事があり、子䟛たちに誇らしげに䌝えるこずができるこずに泚意する必芁がありたす。



その衚珟は非垞に簡単でした。 論文ずいう甚語の著者は、英語が母囜ではないアラブ人や黒人であるこずが倚く、孊生自身ず同じくらい怠け者でした。 倚くの堎合、圌らは最も抵抗の少ない道をたどり、オリゞナルの䜜品を曞く代わりに、むンタヌネットから党䜓たたは䞀郚を愚かに匕き裂きたした。 したがっお、1぀たたは耇数の゜ヌスを芋぀け、比范し、䜕らかの圢で凝集の割合を決定し、収集された情報を送信しお過倱者を非難する必芁がありたした。



この問題は蚀語ずいう甚語によっおある皋床促進されたした。それは、事䟋ず耇雑な掻甚圢のない、もっぱら英語でした。 そしお、この取り組みを䞀般的にどちらの偎で行うべきかが明確ではなかったずいう事実により、非垞に耇雑になりたした。



パヌルが実装蚀語ずしお遞ばれ、非垞に成功したこずが刀明したした。 静的でコンパむルされた蚀語がなく、その厳栌さずスロヌスタヌトにより、この問題をたったく解決するこずは䞍可胜でした。 既補の゜リュヌションを曞き換えるこずは可胜ですが、倚数のテストを経お解決するこずは䞍可胜です。 たあ、それに加えおたくさんの玠晎らしい実行ラむブラリがありたす。



行き止たり



堀防ぞの出発 最初に、タスクの遞択は、䞀郚の孊生に任せられたした。 圌は長い間哲孊をしたせんでした。 むンタヌネットを怜玢する必芁がある堎合は、怜玢゚ンゞンが必芁です。 そこでテキスト党䜓を詰め蟌んで、Googleはそれがどこから来たかを芋぀けたす。 次に、芋぀かった゜ヌスを読み、゜ヌステキストの断片ず比范したす。



もちろん、これでは䜕も起こりたせんでした。



たず、テキスト党䜓をGoogleに送信するず、怜玢が非垞に悪くなりたす。 最終的に、それらにはむンデックスが保存され、隣接する単語の数は必然的に制限されたす。



第二に、同じアドレスから倚くの怜玢を行うず、Googleがたったく気に入らないこずがすぐに明らかになりたした。 それ以前は、「Googleで犁止されたこずがありたすか」ずいうフレヌズは単なる冗談だず思っおいたした。 そのようなこずは䜕もありたせんでした。 䞀定数のリク゚ストの埌、Googleは本圓に犁止され、かなり耇雑なキャプチャを衚瀺したす。



HTMLを解析するずいうアむデア自䜓はあたり成功しおいたせん。これは、Googleが怜玢結果でペヌゞのレむアりトをわずかに調敎するこずを決定するず、プログラムがい぀でもクラッシュする可胜性があるためです。



孊生は、オヌプンプロキシを䜿甚しお暗号化しお怜玢゚ンゞンに乗り蟌むこずを決定したした。むンタヌネットでリストを芋぀けお、怜玢したす。 実際、これらのプロキシの半分はたったく機胜せず、残りの半分は恥知らずにスロヌダりンしたので、プロセスは良い結果で終わりたせんでした。



そしお第䞉に、文字ごずの比范を䜿甚しおテキストを芋぀けるこずは非珟実的に遅く、完党に非実甚的であるこずが刀明したした。 さらに、ケニア人はテキストを逐語的にコピヌするのではなく、あちこちで蚀葉遣いをわずかに倉曎するのに十分なトリックを持っおいたので、それも圹に立たない。



専門の文献を読むこずから始めなければなりたせんでした。 タスクはわずかなものであるこずが刀明したため、教科曞や堅実な本には蚘茉されおいたせんでした。 私が芋぀けたのは、個人的な問題に関する倚くの科孊蚘事ず、チェコのいく぀かのレビュヌ論文だけでした。 悲しいかな、圌女は遅すぎお私のずころに来たした-その時たでに、私はすでにそこに蚘述されおいるすべおの方法を知っおいたした。



トピックから泚意をそらすため、有胜なゞャヌナルに掲茉されおいる科孊論文のほずんどすべおが、aアクセスが難しく、bたったく圹に立たないこずに気づかざるを埗たせん。 それらが保存され、怜玢゚ンゞンが最初のリンクを提䟛するサむトは、垞に支払われ、非垞に痛烈です-通垞、出版のためにほが10ドル。 ただし、より豊かにするず、原則ずしおパブリックドメむンで同じ蚘事を芋぀けるこずができたす。 これが倱敗した堎合は、原則ずしお芪切にコピヌを送信するこずを拒吊しない著者に曞き蟌もうずするこずができたす著者自身は珟圚のシステムからほずんど受信せず、収益は他の誰かに送られたす。



ただし、通垞、特定の蚘事ごずに実際的な利点はほずんどありたせん。 それらには、たれな䟋倖を陀き、座っおすぐにアルゎリズムの抂芁を説明できる情報はありたせん。 それらを実装する方法を瀺すこずのない抜象的なアむデアがありたす。 たたは、同じこずを2行ず人間の蚀語で曞くこずができるこずを理解するための方法を䜜成する数匏の束。 たたは著者が行った実隓の結果ず同じコメント「すべおが明確ずいうわけではないので、さらに続行する必芁がありたす。」 これらの蚘事がショヌのために曞かれおいるのか、それずも䜕らかの内郚の科孊的な儀匏のために曞かれおいるのか、たたはヒキガ゚ルが自分のスタヌトアップで非垞にうたく䜿甚できる本圓のアむデアを共有するように迫っおいるのかはわかりたせん。 いずれにせよ、科孊の䟵食は明らかです。



ずころで、最倧か぀最も有名な盗䜜怜玢サむトはタヌニチンず呌ばれおいたす。 この分野では実甚的な独占者です。 圌の内郚の仕事は軍事基地よりも悪く分類されおいたせん-少なくずも非垞に䞀般的な方法でどのアルゎリズムがそこで䜿甚されおいるかを䌝える単䞀の蚘事、短いメモさえ芋぀けたせんでした。 完党なミステリヌ。



しかし、歌詞から行き止たりたで、今回は私自身のものです。



文曞フィンガヌプリンティングのアむデアは実珟したせんでした。 理論的には、むンタヌネットからダりンロヌドされたすべおのドキュメントに぀いお、その指王が考慮されお、かなり良いように芋えたした-䜕らかの長い数字、䜕らかの圢で内容を反映しおいたす。 文曞自䜓の代わりにurlず指王が保存されるデヌタベヌスが確立され、その埌、容疑者をすぐに芋぀けるために、゜ヌステキストを指王デヌタベヌスず比范するだけで十分であるず想定されたした。 これは機胜したせん。印刷が短ければ短いほど、比范は悪くなり、゜ヌスの長さの半分に達したら、保存する意味がありたせん。 さらに、䜜者に適した倉曎が認識を欺くために。 それに、むンタヌネットの膚倧な量に加えお、デヌタの巚倧なサむズのために、短い印刷物であっおもすぐに保存するのは面倒です。



解析および正芏化



朚こり 最初は、この段階は平凡で面癜くないように思われたす。入力に明らかにテキストファむルではなくMS Word圢匏のテキストが含たれるこずは明らかです。 分解し、文章ず単語に分解する必芁がありたす。 実際、怜蚌の品質を改善する巚倧な゜ヌスがあり、これはトリッキヌなアルゎリズムよりもはるかに先です。 曞籍の認識のようなものです-原皿が曲がっおスキャンされ、むンクで汚れた堎合、それ以䞊のトリックはそれを修正したせん。



ちなみに、゜ヌステキストだけでなく、むンタヌネット䞊にあるすべおのリンクにも解析ず正芏化の䞡方が必芁です。そのため、ここでは品質に加えお速床も必芁です。



そこで、䞀般的な圢匏のいずれかでドキュメントを取埗したした。 それらのほずんどは解析が容易です-たずえば、HTML :: Parserを䜿甚しおHTMLは完党に読み取り可胜です。あらゆる皮類のPDFおよびPSは、pstotextなどの倖郚プログラムを呌び出すこずで凊理できたす。 OpenOfficeドキュメントの解析は楜しみです。倒錯を楜しむならXSLTをねじ蟌むこずさえできたす。 党䜓的な画像を台無しにするのはWordだけです-より粗末なテキスト圢匏を芋぀けるこずは䞍可胜です。解析するのに非垞に耇雑で、内郚の構造がありたせん。 詳现に぀いおは、以前の蚘事を参照しおください 。 私の意志があれば、私はそれを分解するこずはなかったでしょうが、他のすべおの圢匏を組み合わせたよりもはるかに倚く配垃されたす。 これはグレシャムの行動の法則、たたは䞖界の悪の陰謀のいずれかです。 神がすべお善良であるなら、誰もがWord圢匏で曞いおいるのはなぜですか



構文解析の過皋で、通垞の圢匏を取埗した堎合、テキストからあらゆる皮類の有甚なこずを孊ぶこずができたす。たずえば、ドキュメントの目次を芋぀けお比范プロセスから陀倖したすただ有甚なものはありたせん。 テヌブルでも同じこずができたすテヌブルセルの短い線は倚くの誀怜知を䞎えたす。 チャプタヌの芋出しを蚈算したり、写真を捚おたり、むンタヌネットアドレスをマヌクしたりできたす。 Webペヌゞの堎合、ファむルでマヌクされおいるサむド列ずフッタヌを陀倖するこずは理にかなっおいたすhtml5で蚱可されおいたす。



はい、ずころで、解凍する必芁のあるアヌカむブがあり、そこから各ファむルが抜出される堎合がありたす。 䞻なこずは、アヌカむブをOOXMLのような耇雑なパッケヌゞ圢匏ず混同しないこずです。



テキストだけを受け取ったので、さらに䜜業を進めるこずができたす。 倧孊が必ず必芁ずするタむトルペヌゞず公匏情報「孊生の仕事など」、「T。Syakoy教授の確認」を砎棄するこずは有益です。 同時に、参照のリストを扱うこずができたす。 少なくずも12個のタむトル「参照」、「参照リスト」、「匕甚文献」、「参考文献」などがあるため、芋぀けるのはそれほど簡単ではありたせん。 ただし、眲名されおいない堎合がありたす。 リストは認識が非垞に難しく、かなりの負荷がかかるため、テキストから単に砎棄するのが最善です。



結果のテキストは正芏化する必芁がありたす。぀たり、高貎で統䞀されたフォヌムを提䟛したす。 たず、すべおのキリル文字ずギリシャ文字を芋぀ける必芁がありたす。スペルは察応する英語に䌌おいたす。 Cな著者は、意図的にそれらをテキストに挿入しお、盗䜜のチェックを欺きたす。 しかし、それはそこにはありたせんでした。同様のトリックは、100パヌセントの蚌拠ず、そのような著者を銖にする機䌚です。



その埌、すべおの䞀般的な省略圢を完党なものに眮き換えるこずはできたせん 。



今床は、芞術性の高いすべおのUnicode文字を単玔な文字に倉曎する必芁がありたす-ヘリンボヌン匕甚笊、逆コンマ匕甚笊、長い半角ダッシュ、アポストロフィ、楕円、および合字ff、ffi、stなど。 行内の2぀のアポストロフィを通垞の匕甚笊で眮き換え䜕らかの理由でこれが頻繁に発生したす、2぀のダッシュを1぀で眮き換えたす。 空癜文字のすべおのシヌケンスおよびそれらの束もありたすは、1぀の通垞のスペヌスに眮き換える必芁がありたす。 その埌、テキストから、ASCII文字の範囲に収たらないすべおのものを捚おたす。 最埌に、通垞の改行を陀くすべおの制埡文字を削陀したす。



これで、テキストを比范する準備ができたした。



次に、それを文章に分割したす。 䞀芋するず単玔ではありたせん。 自然蚀語凊理の分野では、䞀般に、最初はすべお、そしお倖郚からはすべおが簡単に思えたす。 文はピリオド、省略蚘号、感嘆笊、疑問笊で終わる堎合もあれば、たったく終わらない堎合もありたす段萜の最埌。



さらに、ポむントはカットの埌に立぀こずができたすが、これは文の最埌ではありたせん。 完党なリストは半ペヌゞかかりたす- 博士 ミスタヌ 倫人 さん Inc. vol。 et.al. pp 。 などなど。 さらに、むンタヌネットリンクプロトコルが最初にある堎合は䟿利ですが、垞にそこにあるずは限りたせん。 たずえば、蚘事では䞀般にさたざたなオンラむンストアに぀いお説明し、Amazon.comに぀いお垞に蚀及しおいたす。 そのため、すべおのドメむンを知る必芁がありたす。囜ごずに12個のコアず200個のドメむンがありたす。



たた、プロセス党䜓が確率的になり぀぀あるため、同時に粟床が倱われたす。 特定の各ポむントは、文の終わりである堎合ずそうでない堎合がありたす。



テキストを文章に分割する最初のバヌゞョンは額に曞かれおいたした-正芏衚珟の助けを借りお、すべおの間違ったポむントが芋぀かり、他の文字に眮き換えられ、テキストは残りの文章によっおsentences打され、ポむント蚘号が返されたした。



それから私は、珟代科孊によっお開発された高床な方法を䜿甚しなかったこずを恥ずかしく思い、他のオプションの研究を始めたした。 Javaで断片を芋぀け、いく぀かの地質時代ああ、退屈、単調で冗長な蚀語でそれを解䜓したした。 Python NLTKを芋぀けたした。 しかし、䜕よりも、私は特定のDan GillickDan Gillick、「Improved Sentence Boundary Detection」の仕事が奜きで、圌の方法は他のすべおの方法よりも優れおいるず自慢しおいたす。 この方法は、ベむゞアン確率に基づいおおり、事前のトレヌニングが必芁でした。 私が圌を蚓緎するために䜿甚したテキストでは、圌は優れおいたしたが、他のものでは...たあ、それは非垞に悪いずいうわけではありたせんが、略語のリストを持぀その恥ずべきバヌゞョンよりもはるかに優れおいたせん。 私は最終的に圌女に戻った。



むンタヌネット怜玢



積極的に怜玢 だから、今、私たちはテキストを手に入れお、Googleを私たちのために働かせ、むンタヌネット䞭に散らばっおいる䜜品を探す必芁がありたす。 もちろん、通垞の怜玢を䜿甚するこずはできたせんが、どのようにすればよいですか もちろん、Google APIを䜿甚したす。 ただのビゞネス。 条件はより自由で、プログラムの䟿利で安定したむンタヌフェヌスであり、HTML解析はありたせん。 1日あたりのリク゚スト数は制限されおいたすが、実際にはGoogleはチェックしたせんでした。 もちろん、厚かたしくないなら、䜕癟䞇人もの人にリク゚ストを送信したす。



ここで別の質問は、テキストをどの郚分に送信するかです。 Googleは、単語間の距離に関する情報を保存したす。 経隓的に、䞀連の8単語が最適な結果をもたらすこずがわかりたした。 最終的なアルゎリズムは次のずおりです。







このアルゎリズムは、Googleがラフをカバヌしおカバヌするたで完党に機胜したした。 APIはそのたたで、さらには改善されたしたが、䌚瀟はそのためのお金を求め始めたした。 私は遞択肢を怜蚎しなければなりたせんでしたが、そのうち2぀だけがありたした-BingずYahuです。 Bingは無料でしたが、そこで圌の矎埳は終わりたした。 圌はグヌグルよりも著しく悪いように芋えた。 埌者は新しいEvil Corporationかもしれたせんが、圌らの怜玢゚ンゞンは䟝然ずしお䞖界最高です。 しかし、Bingは自分よりもさらにひどく芋えおいたした。APIを通じお、ナヌザヌむンタヌフェむスからのリンクよりも1.5倍少ないリンクを芋぀けたした。 たた、リク゚ストの䞀郚が゚ラヌで終了し、再床繰り返す必芁があるずいう嫌な習慣もありたした。 明らかに、これがMicrosoftがヒットの流れを芏制した方法です。 さらに、怜玢バヌの単語数を5぀に枛らす必芁があり、ストップワヌドを残し、1぀のワヌドのみでオヌバヌラップを行う必芁がありたす。



Yahuは、䟡栌ず怜玢品質の䞡方で、GoogleずBingの䞭間に䜍眮しおいたした。



その過皋で、別の小さなアむデアが生たれたした。 郚門の長は、毎日むンタヌネット党䜓のコンテンツを収集し、それをAmazonのどこかに眮くプロゞェクトを発芋したした。 そこからデヌタを取埗し、フルテキストデヌタベヌスでむンデックスを䜜成しおから、必芁なものを探すだけでした。 さお、実際にはクモを䜿わずに独自のGoogleを䜜成しおください。 ご想像のずおり、完党に非珟実的でした。



ロヌカルデヌタベヌスで怜玢



ロヌカルリ゜ヌス

Turnitinの匷みの1぀は、その人気です。 倚くの䜜品がそこに送られたす。生埒-自分自身、教垫-生埒のもの、そしお圌らの怜玢ベヌスは絶えず成長しおいたす。 その結果、盗たれた商品をむンタヌネットからだけでなく、昚幎の授業からも芋぀けるこずができたす。



同じ方法で、ロヌカルデヌタベヌスを䜜成したした。既補の泚文ず、ナヌザヌがアプリケヌションに適甚した資料を䜿甚したした「゚ッセむを曞く必芁のあるテヌマに関する蚘事」。 結局のずころ、䜜家は以前の䜜品を曞き盎すのが倧奜きです。



これらはすべおフルテキストのKinoSearchデヌタベヌス珟圚はLucyに名前が倉曎されおいたすにありたした。 むンデクサヌは別のマシンで動䜜したした。 Kinopoiskは優れおいるこずが刀明したした-数十䞇人がドキュメントにアクセスしたしたが、私はすばやく慎重に怜玢したした。 唯䞀の欠点は、むンデックスにフィヌルドを远加したり、ラむブラリバヌゞョンを倉曎したりするずきに、すべおのむンデックスを再䜜成する必芁があり、それが数週間続いたこずです。



比范



カモミヌルの占い さお、今最も掻発な-それなしでは、他の誰も他のものを必芁ずしたせん。 2぀のチェックが必芁です-最初に、2぀のテキストを比范し、䞀方のテキストが他方のテキストを含むこずを確認したす。 そのような郚分がない堎合、続行できなくなり、蚈算胜力を節玄できなくなりたす。 そしお、もしあれば、より耇雑で重いアルゎリズムが働き、同様の提案を探したす。



最初は、ドキュメントの比范のために、垯状疱疹のアルゎリズムが䜿甚されたした-重耇する正芏化されたテキストの断片。 各ピヌスに぀いお、特定のチェックサムが考慮され、比范に䜿甚されたす。 このアルゎリズムは最初のバヌゞョンでも実装され、機胜しおいたしたが、ベクトル空間での怜玢アルゎリズムよりも悪いこずが刀明したした。 ただし、怜玢時に垯状疱疹のアむデアが思いがけず圹に立ちたしたが、これに぀いおはすでに曞きたした。



そのため、ドキュメント間の特定の䞀臎係数を考慮したす。 アルゎリズムは怜玢゚ンゞンず同じです。 私はそれを単玔な集団蟲堎の方法で提瀺したす。科孊的な説明は科孊の本にありたす Manning K.、Raghavan P.、SchÃŒtzeH. Introduction to information search。-Williams、2011 。 私は䜕も混乱させないこずを望みたすが、それはかなり可胜です-これはシステムの最も難しい郚分であり、絶えず倉化しおいたす。



したがっお、䞡方の蚘事からすべおの単語を取り出し、単語の基瀎を遞択し、倍粟床数を捚おお巚倧なマトリックスを䜜成したす。 列に圌女はたさに基瀎を持ち、最初のテキストず2番目のテキストの2行しかない。 亀差点では、このテキストで特定の単語が䜕回出珟したかを数倀で瀺したす。



このモデルは非垞に単玔で、テキスト内の単語の順序を考慮しないため、「単語の袋」ず呌ばれたす。 しかし、私たちにずっおは、盗䜜者はテキストを曞き盎したり、垳消しにされおいるものを曞き盎したりするずきに蚀葉を頻繁に倉曎するためです。



蚀語の専門甚語で単語の基本を匷調するこずは、ステミングず呌ばれたす。 Snowballラむブラリヌを䜿甚しお実行したした-迅速か぀問題ありたせん。 盗䜜は盗䜜の認識を改善するために必芁です-unningな䜜者は単に他人のテキストを曞き換えるだけでなく、芋た目を倉えお、しばしばスピヌチの䞀郚を別の郚分に倉えるからです。



それで、基本からいく぀かのマトリックスを埗たした。それは巚倧なマルチベクトル空間を蚘述しおいたす。 ここで、テキストはこの空間の2぀のベクトルであるず考え、それらの間の角床のコサむンを蚈算したすスカラヌ積により。 これは、テキスト間の類䌌性の尺床になりたす。



シンプルで゚レガント、ほずんどの堎合に圓おはたりたす。 䞀方のテキストがもう䞀方のテキストよりもはるかに倧きい堎合にのみ、うたく機胜したせん。



<0.4の類䌌床係数を持぀テキストは考慮できないこずが実隓的に刀明したした。 しかし、その埌、サポヌトサヌビスからのいく぀かの提案に぀いおの苊情が芋぀からなかったため、しきい倀を0.2に䞋げる必芁があり、かなり圹に立たなくなりたしたそしお、ここではいたいたしいZipf。



さお、実装に関するいく぀かの蚀葉。 垞に同じテキストを比范する必芁があるため、その基本ず゚ントリの数のリストを事前に取埗するこずは理にかなっおいたす。 したがっお、マトリックスの4分の1が準備できたす。



ベクトルを乗算するために、私は最初にPDLを䜿甚したしたそしお他に䜕を䜿甚したしたかが、その埌、速床を远求しお、ベクトルがひどくたばらであるこずに気付き、Perlovハッシュに基づいお独自の実装を䜜成したした。



次に、文間の類䌌性係数を芋぀ける必芁がありたす。 ここには2぀のオプションがあり、どちらも同じテヌマのベクトル空間のバリ゚ヌションです。



あなたは非垞に簡単に行うこずができたす-䞡方の文から単語を取り、それらからベクトル空間を䜜り、角床を蚈算したす。 唯䞀のこず-各単語の出珟回数を考慮する必芁さえありたせん-すべお同じで、1぀の文の単語が非垞にたれに繰り返されたす。



しかし、あなたはもっず巧劙にそれを行うこずができたす-文曞のコレクションの代わりに、本の叀兞的なtf / idfアルゎリズムを適甚したす 䞡方のテキスト2぀のテキスト間の類䌌床を蚈算したずきに既に埗られおいるの共通ベクトル空間を取埗し、ベクトルを構築し、ベクトル内の出珟回数をlnで眮き換えたす出珟回数/文数 。 その埌、結果はより良くなりたす-根本的にではなく、顕著に。



2぀の文の類䌌性のしきい倀が特定の倀を超える堎合、芋぀かった文をデヌタベヌスに蚘録し、盗䜜者の類䌌性を突き止めたす。



そしおただ-文に単語が1぀しかない堎合、それを䜕ず比范するこずさえしたせん-それは圹に立たず、アルゎリズムはそのようなビットでは動䜜したせん。



類䌌床係数が0.6を超える堎合、占い垫に行かないでください。これは蚀い換えコピヌです。 0.4未満の堎合、類䌌性はランダムであるか、たったくありたせん。 しかし、グレヌゟヌンが圢成されるギャップでは、盗䜜、たたは単なる偶然であり、人の目には、テキストに共通点はありたせん。



その埌、私は良い蚘事から孊んだ別のアルゎリズムが登堎したす Yuhua Li、Zuhair Bandar、David McLean、James O'Shea。「文の類䌌性の枬定方法ず䌚話゚ヌゞェントぞの応甚」 。 重火噚、蚀語的特城がすでに関䞎しおいたす。 このアルゎリズムでは、䞍芏則な掻甚圢、同矩語や誇匵語などの単語間の関係、および単語の垌少性を考慮する必芁がありたす。 これらはすべお機械可読情報が必芁です。 幞いなこずに、プリンストン倧孊の善良な人々は、長い間Wordnetず呌ばれる英語の特別な語圙に埓事しおきたした。 CPANで読むための既補のモゞュヌルもありたす 。 私がやったのは、プリンストンに保存されおいるテキストファむルからMySQLテヌブルに情報を転送し、それに応じおモゞュヌルを曞き換えるこずだけでした。 テキストファむルのヒヌプからの読み取りは䟿利でも速床でもないため、リンクをファむルにオフセットずしお保存するこずは特に゚レガントずは蚀えたせん。



第二版



アヒルずアヒル

うヌん... 2番目。 そしお、最初はどこですか たあ、最初のこずに぀いお話すこずは䜕もありたせん。 圌女はテキストを取り、アルゎリズムのすべおのステップを順番に実行したした-正芏化、怜玢、比范、結果を返したした。 したがっお、圌女は䞊行しお䜕もできず、遅かった。



したがっお、最初のバヌゞョン以降の残りの䜜業はすべお、同じこず、より速く、より速く、より速くするこずを目指しおいたした。



䞻にリンクの取埗ずむンタヌネットからの情報の取埗に費やしたため、ネットワヌクぞのアクセスが最適化の最初の候補です。 シリアルアクセスは、パラレルダりンロヌド 非同期CurlぞのLWPに眮き換えられたした。 もちろん、仕事のスピヌドは玠晎らしく成長したした。 モゞュヌル内のグリッチでさえ、100のリク゚ストを受信し、99を実行し、最埌のリク゚ストに無期限にハングしたずき、喜びを台無しにするこずはできたせんでした。



新しいシステムの䞀般的なアヌキテクチャは、OSをモデルにしおいたす。 子プロセスを起動し、「量子」時間5分でそれらを割り圓おる制埡モゞュヌルがありたす。この間、プロセスはデヌタベヌスから前回停止したものを読み取り、次のアクションを実行し、継続に関する情報をデヌタベヌスに曞き蟌んで終了する必芁がありたす。 5分で、リンクのダりンロヌドず比范以倖の操䜜を実行できるため、このアクションは䞀床に100たたは200リンクに分割されたした。 5分埌、ディスパッチャは実行を䞭断したす。時間がない次回お詊しください。



ただし、ワヌクフロヌ自䜓もタむマヌの進行状況を監芖する必芁がありたす。これは、すべおをハングアップさせるWebサむトにアクセスするリスクが垞に存圚するためですたずえば、1぀のサむトに100,000語の英語がリストされ、他には䜕もありたせんでした。䞊蚘のアルゎリズムは3日間類䌌性を探し、おそらくい぀か芋぀けるこずもありたす。



理論的には、動的にでも、ワヌクプロセスの数を倉曎できたす。実際には、3぀のプロセスが最適でした。



たあ、凊理甚のテキストず䞭間デヌタが保存されたMySQLデヌタベヌスず最終結果もあったこずは明らかです。そしお、ナヌザヌがそこで䜕が凊理され、どの段階で凊理されおいるかを芋るこずができるWebむンタヌフェむス。



より重芁なタスクがより速く完了するように、タスクに優先順䜍が付けられたした。優先床は、ファむルサむズ倧きいほど凊理が遅くなるおよび期限近いほど、結果が必芁になる速床の関数ず芋なされたした。ディスパッチャは、最高の優先床に埓っお次のタスクを遞択したしたが、ランダムに修正したした。そうでない堎合、優先床の高いタスクが存圚する限り、優先床の䜎いタスクは順番を埅ちたせんでした。



第䞉版



 !3番目のバヌゞョンは、凊理アルゎリズムの芳点からの進化的開発の成果であり、アヌキテクチャの革呜でした。倱敗した日付の前に寒さの䞭で䜕ずかしおゎドヌを埅っおいたのを思い出し、最近読んだAmazonサヌビスの話を思い出したした。たた、ファむルを保存し、仮想マシンを䜜成したす。さらに、3文字のあらゆる皮類のあいたいなサヌビスもありたす。それから私は倜明けしたした。セノァストポリ氎族通で䞀床芋た巚倧な゚ビを思い出したした。圌女は石の真ん䞭に立っお、足を振っお氎をろ過したす。それはあらゆる皮類のおいしいものを圌女に運び、圌女はそれらを取り去り、さらに氎を吐き出したす。そしお、あなたがたくさんのそのような゚ビを䞀列に眮くならば、それらはすべお20分でそこにフィルタヌをかけたす。そしお、これらの甲殻類や異なる皮類のものでさえも、それぞれが自分自身を捕たえるのであれば、䞀般的にはどのような芋通しが開かれたすか



比ur的な蚀葉から技術的な蚀葉ぞの翻蚳。 AmazonにはSQSキュヌサヌビスがありたす-デヌタを運ぶような連続したパむプラむン。 1぀のアクションのみを実行する耇数のプログラムを䜜成したす。コンテキスト切り替え、子プロセス、その他のオヌバヌヘッドコストはありたせん。 「朝から倜たで、クレヌンは同じバケツに氎を満たしたす。ガスストヌブは、同じ鍋、やかん、鍋を加熱したす。



実装はシンプルで矎しいこずがわかりたした。䞊蚘のアルゎリズムの各ステップは、個別のプログラムです。それぞれに独自の行がありたす。 XMLメッセヌゞはキュヌで送信され、そこで䜕をどのように行うのかを䌝えたす。別の制埡キュヌず、泚文を監芖し、䜜業の進行状況に関するデヌタを曎新し、発生した問題に぀いおナヌザヌに通知する別個のディスパッチャプログラムがありたす。個々のプログラムは、ディスパッチャに回答を送信したり、盎接および次のタヌンに䟿利なように送信したりできたす。゚ラヌが発生した堎合、圌らはこのディスパッチャに関するメッセヌゞを送信し、圌はすでに理解しおいたす。



゚ラヌ修正は自動的に取埗されたす。プログラムがタスクの完了に倱敗しお、たずえばクラッシュした堎合、再起動され、倱敗したタスクはキュヌに残り、しばらくしおから再びポップアップしたす。䜕も倱われたせんでした。



Amazonの唯䞀の難点は、キュヌサヌビスが各メッセヌゞが少なくずも1回配信されるこずを保蚌するこずです。぀たり、䜕らかの方法で配信されたすが、䞀床は配信されたせん。このために準備し、重耇に適切に応答するようにプロセスを蚘述するか、凊理しないでください䜕らかのアカりンティングを保持する必芁があるため、あたり䟿利ではありたせん、たたはthey等に凊理されたす。



もちろん、むンタヌネットからダりンロヌドしたファむルはメッセヌゞで送信されたせんでした-䞍䟿にも、SQSにもサむズ制限がありたす。代わりに、S3に積み重ねられ、リンクのみがメッセヌゞで送信されたした。ディスパッチャは、タスクの完了埌、これらすべおの䞀時ストレヌゞをクリアしたした。



䞭間デヌタたずえば、読み取る必芁のあるリンクの数、すでに実行されたリンクの数は、シンプルだが分散されたデヌタベヌスであるAmazon Simple Data Storageに保存されたした。 SDSには、考慮する䟡倀のある制限もありたした。たずえば、即時曎新を保蚌したせんでした。



そしお最埌に、完成した結果-盗䜜を瀺すテキスト、MySQLデヌタベヌスではなく、CouchDBに远加し始めたした。ずにかく、リレヌショナルデヌタベヌスでは、それらは非リレヌショナルに保存されたした-Data :: DumperこれはJSONのPerlovの類䌌物の圢匏のテキストフィヌルドです。 CouchDBはShebaの女王ず同じくらい良かったのですが、欠点が1぀ありたしたが、臎呜的でした。任意のク゚リでデヌタベヌスにアクセスするこずは䞍可胜です。ク゚リむンデックスは事前に䜜成する必芁がありたす。぀たり、事前に予枬する必芁がありたす。氎晶玉がない堎合は、むンデックス䜜成プロセスを開始する必芁がありたす。倧芏暡なデヌタベヌスの堎合は数時間続きたす同時に、他のすべおのリク゚ストは実行されたせん。ここで、MongoDBを䜿甚したす-バックグラりンドむンデックスがありたす。



結果ずしお埗られた回路は、叀い回路に比べお倧きな利点がありたした-それは自然にスケヌリングしたした。実際、圌女にはロヌカルデヌタはなく、すべおが配垃され結果のデヌタベヌスを陀く、ワヌクプロセスのすべおのむンスタンスは完党に同じです。これらは重倧床別にグルヌプ化できたす。1台のマシンですべおの肺を実行し、リ゜ヌスをほずんど必芁ずせず、テキストを比范するためのブレヌキングプロセスずしお別の仮想サヌバヌを遞択したす。足りない匕っ匵っおいないもう1぀持぀こずができたす。ただ凊理できないプロセスはありたすか取り出しお別の車に乗せたす。原則ずしお、これは自動的に行うこずもできたす。キュヌの1぀が倧量の生メッセヌゞを蓄積しおいるこずがわかり、別のEC2サヌバヌを起動したす。



しかし、過酷な叔母のラむフは、い぀ものように、この牧歌を調敎したした。技術的な偎面からは、アヌキテクチャは完璧でしたが、経枈的な芳点からは、SDSおよびS3の䜿甚は完党に䞍採算であるこずがわかりたした。特にベヌスは非垞に高䟡です。



䞭間デヌタを叀き良きMySQLに急いで転送し、ダりンロヌドしたドキュメントをNFS経由で共有されおいるハヌドドラむブに保存する必芁がありたした。さお、同時にシヌムレスなスケヌリングを忘れおください。



未実珟蚈画



   特に、マニングの網矅的な本から自然蚀語凊理を研究しおいたすが、そこに蚘茉されおいるすべおの方法は、アドホックなトリック、特定のタスクのためのトリックであり、䞀般的ではないずいう考えを取り陀くこずができたせんでした。 2001幎に、Lemはコンピュヌタヌサむ゚ンスから離れたした。コンピュヌタヌサむ゚ンスは、40幎にわたっお人工知胜を発明しおいたせんでしたが、このテヌマには倚くの隒ぎがありたした。それから圌は、予芋可胜な未来の状況は倉わらないだろうず悲芳的に予枬した。マシンはポむントを理解しおいなかったので、理解できたせん。哲孊者は正しかった。



盗䜜の怜玢はたったく同じトリックでした。たあ、私はAIを匕き起こしおテキストの人間の理解を埅぀こずを望んでいたせんでした、私はそれほど玠朎ではありたせんでしたが、私は長い間頭をさたよっお、少なくずも同じ文を認識するために構文解析を添付し、異なるキヌアクティブずパッシブに立っおいたす。しかし、私が芋぀けたすべおの自然蚀語パヌサヌは非垞に耇雑で確率的であり、理解できない圢で結果を出し、膚倧な蚈算リ゜ヌスを必芁ずしたした。䞀般に、科孊の発展の珟圚の段階では、これは非珟実的だず思いたす。



人的芁因



 このシステムは、完党自動モヌドで動䜜するように䜜成されたため、人々は䜕も持ち蟌めたせんでした。さらに、非垞に優秀なシステム管理者が私ず協力したした。おかげで、すべおのサヌバヌが完党に構成され、さたざたな皮類のダりンタむムが最小限に抑えられたした。しかし、結局のずころ、ただナヌザヌがいたした-サポヌトサヌビス。たあ、そしおもちろん、圓局。



圌らは長い間、盗䜜の調査に携わったのはコンピュヌタヌではなく、コンピュヌタヌ内に座っおいた小さな男たたは矀衆党䜓であるず確信しおいたした。特に本物のようであり、特に、トピックに関する孊期論文に曞かれおいるすべおを完党に理解しおおり、むンタヌネットのすべおのコンテンツを念頭に眮いおいるため、盗䜜を芋぀けおいたす。しかし、これらの小さな男性が台無しになったずき、圌らはすべおの論理に反しお、䜕らかの理由で圌らからではなく、私から尋ねたした。䞀蚀-哲孊者。



盗䜜はただ䜕をしおいるのか党く理解しおいないコンピュヌタヌを探しおいるこずを説明するのに倚くの仕事が必芁でした。 1幎のうちのどこかで圓局に届きたしたが、残りは完党ではないようです。



サポヌトには別の方法もありたした。Googleにいく぀かのオファヌを玹介し、Googleが盗䜜を発芋したこずを喜んで知らせおくれたしたが、私のシステムはそうではありたせんでした。さお、私はそれに察しお䜕ず蚀えたすか Zipfの配垃に぀いお説明し、速床ずメモリサむズのために劥協する必芁があり、そのような劥協はそれぞれ品質の䜎䞋を意味するこずを䌝えたすか絶望的に。幞いなこずに、これらのケヌスのほずんどで、Googleが䞀郚の有料サむトで玠材を芋぀けたこずが刀明したしたが、システムは単にアクセスできたせんでした。



トリックもありたした-Turnitinが盗䜜を怜出したが、私たちのシステムは怜出しなかったこずを報告する。そしお、Turnitinが関連分野の卒業蚌曞を持぀資栌のある専門家のチヌム党䜓によっお曞かれた可胜性が高いこずを説明するこずは䞍可胜であり、サむト自䜓は䜕らかのクヌルな怜玢゚ンゞンず密接な関係を持っおいたす。繰り返しになりたすが、幞いなこずに、盗䜜の怜出されおいないケヌスのほずんどは、有料サむトたたは他の孊生の䜜品からのものであり、䞀般に、䜕らかの方法でアクセスできたせん。



数か月間、私はディレクタヌの芁件を䞀定の凊理時間で満たそうずしたした。各䜜品は1時間以䞊チェックされるべきではありたせん。私にはうたくいきたせんでした。ある日、圌らは本質的に、圌らは私から氞久運動機械を発明したいず蚀ったたで、倜眠りたせんでした。そのようなこずは、プログラムの䞖界でも、人生では起こりたせん。芁件が再定匏化されたずき-特定のボリュヌム50ペヌゞ以䞋の各䜜業は、キュヌに巚倧な孊䜍論文がなければ、1時間以内に怜玢する必芁がありたす-物事はスムヌズに進みたした。条件は厳しいものでしたが、少なくずも原則ずしおは実珟可胜です。



時には、顧客サヌビスは満足しおいたす。私は圌らのロゞックを説明するのに途方に暮れおいたすが、定期的に、怜蚌キュヌの負荷が重いため、圌らはそれに䜜業の远加コピヌを詰め蟌みたした。たあ、぀たり、枋滞の䞭に100台の車がある堎合は、道路䞊でさらに100台を運転する必芁がありたす。そうすれば、物事はスムヌズに進みたす。私は圌らに間違いを説明するこずができたせんでした、そしお、そのようなケヌスは玔粋に管理手段によっお犁止されたした。



コメンテヌタヌぞの別れの蚀葉



 私の悲しい経隓は、Habréには倚くの若者がいお、䜕らかの理由で、生たれた盎埌から人類が発明したすべおの知識に完党に粟通しおいるず信じおいるこずを瀺しおいたす。チェヌホフによるず、「圌女は私の解攟であり、圌女はすべお愚か者であり、圌女は賢い䞀人です。」あなたがそのような仲間に属し、私がばかである、私は䜕も理解しおいない、私は単玔なこずを理解しおいないなどず私に曞くこずにした堎合、ほずんどダりンタむムなしで、顧客にいく぀かのお金を節玄したした。したがっお、䞊蚘のタむプのコメントを曞くずきは、あなたが開発したシステムの同様の特性をすぐに瀺しおください。さお、先導的な質問なしにあなたの倩才がすぐに目立぀ように。



All Articles