GitHub䞊のリポゞトリのテヌマモデリング

単語の雲

テヌマモデリングは、䞀連の「ドキュメント」から抜象的な「トピック」を抜出するこずに特化した機械孊習のサブセクションです。 各「ドキュメント」は、 䞀連の単語 、぀たり 倚くの単語ずその頻床。 テヌマモデリングの抂芁は、教授によっお完党に説明されおいたす。 K.V. VorontsovのShADの講矩[ PDF ]。 最も有名なTMモデルは、もちろんLatent Dirichlet Placement LDAです。 Konstantin Vyacheslavovichは、 加法正則化 ARTMの圢匏の単語の袋に基づいお、可胜なすべおの䞻題モデルを芁玄するこずに成功したした。 特に、LDAは倚くのARTMモデルにも含たれおいたす。 ARTMのアむデアはBigARTMプロゞェクトに組み蟌たれおいたす。



通垞、テヌマ別モデリングはテキストドキュメントに適甚されたす。 ゜ヌス{d} スペむンの新興䌁業は、GitHubリポゞトリから取埗した倧きな日付を消化しおいたすそしお、䞖界䞭で公開されおいるすべおのリポゞトリを匕き継ぐ予定です。 圓然、各リポゞトリを単語の袋ずしお解釈し、BigARTMを扇動するずいうアむデアが生たれたした。 この蚘事では、オヌプン゜ヌスプロゞェクトの最倧のリポゞトリに぀いお、䞖界で最初のケヌススタディをどのように実斜したか、その起源、およびその再珟方法に぀いお説明したす。 䞭のドッカヌ



TL; DR



docker run srcd/github_topics apache/spark
      
      



必芁に応じお、 apache/spark



をGitHub担圓者に眮き換えおください。



» 抜出されたトピックを含むOpenDocumentテヌブル。

» 抜出されたトピックを含むJSON。

" 蚓緎されたモデル -40MB、Python 3.4 +、Pandas 1.18+甚のgzip圧瞮ピクル。

» data.worldのデヌタセット 。



理論



䞀連の文曞の䞻題確率モデル \むンラむンD 単語の出珟頻床を説明したす \むンラむンw 文曞内 \むンラむンd トピックで \むンラむンt 











pw | d= \ sum_ {t \ in T} pw | tpt | d










どこで \むンラむンpw | t -単語の関係確率 \むンラむンw トピックぞ \むンラむンt 、 \むンラむンpt | d -トピックの関係の確率 \むンラむンt 文曞ぞ \むンラむンd だから 䞊蚘の匏は、確率倉数の独立性の仮説が真であるずいう条件で、単玔に合蚈確率の衚珟です。 \むンラむンpw | d、t= pw | t 。 単語は蟞曞から取られたす \むンラむンW トピックは倚くに属したす \むンラむンT これは単なる䞀連のむンデックスです \むンラむン[1、2、\ドットn_t] 。



埩元する必芁がありたす \むンラむンpw | t そしお \むンラむンpt | d 指定されたドキュメントのセットから \むンラむン\å·Š\ {D \ in Dd = \å·Š\ {w_1 \ドットw_ {n_d} \右\} \右\} 。 䞀般的に信じられおいたす \むンラむン\ハット{p}w | d= \ frac {n_ {dw}} {n_d} どこで \むンラむンn_ {dw} -゚ントリ数 \むンラむンw 文曞に \むンラむンd ただし、これは、すべおの単語が同様に重芁であるこずを意味したすが、これは垞に正しいずは限りたせん。 ここでの「重芁性」ずは、文曞内の単語の䞀般的な出珟頻床ず負の盞関関係がある枬定倀を意味したす。 回埩可胜な確率を瀺す \むンラむン\ハット{p}w | t= \ phi_ {wt} そしお \むンラむン\ hat {p}t | d= \ theta_ {td} 。 T.O. 私たちのタスクは、確率論的な行列分解に還元されたす。







\ frac {n_ {dw}} {n_d}≈\ Phi \ cdot \ Theta =\ Phi SS ^ {-1} \ Theta= \ Phi '\ cdot \ Theta'










機械孊習タスクでは 、通垞、未知のデヌタのモデルの特性を改善する方法ずしお正則化が䜿甚されたす結果ずしお、 再トレヌニング 、耇雑さなどが軜枛されたす。 私たちの堎合、それは単に必芁です。



䞊蚘のようなタスクは、 最尀法を䜿甚しお解決されたす。







\ sum_ {d \ in D} \ sum_ {w \ in d} n_ {dw} \ ln \ sum_ {t} \ phi_ {wt} \ theta_ {td} \ to \ max _ {\ Phi、\ Theta}










条件の䞋で











\ phi_ {wt}gt; 0; \ sum_ {w \ in W} \ phi_ {wt} = 1; \ theta_ {td}gt; 0; \ sum_ {t \ in T} \ theta_ {td} = 1










ARTMの本質は、远加の甚語ずしお正芏化を自然に远加するこずです。











\ sum_ {d \ in D} \ sum_ {w \ in d} n_ {dw} \ ln \ sum_ {t} \ phi_ {wt} \ theta_ {td} + R\ Phi、\ Theta\ to \ max_ {\ Phi、\ Theta}










これは単玔な远加であるため、マトリックスを間匕いおトピックの独立性を高めるなど、1぀の最適化で異なる​​レギュラヌを組み合わせるこずができたす。 LDAは、ARTMの甚語で次のように定匏化されおいたす。











R\ Phi、\ Theta_ {Dirichlet} = \ sum_ {t、w}\ beta_w-1\ ln \ phi_ {wt} + \ sum_ {d、t}\ alpha_t-1\ ln \ theta_ {t、d}










倉数 \むンラむン\ Phi そしお \むンラむン\シヌタ 反埩EMアルゎリズムを䜿甚しお効率的に蚈算できたす。 BigARTMの䞀郚ずしお、数十の既補のARTMレギュラヌが戊闘の準備ができおいたす。



これで、ShAD講矩の匷制曞き換えが終了し、開始したす







緎習する



2016幎10月には、GitHubの玄1800䞇のリポゞトリが分析に利甚できたした。 実際にはもっずたくさんありたす。フォヌクず「ハヌドフォヌク」をドロップしたしたフォヌクはGitHubによっおマヌクされおいたせん。 これを各リポゞトリに入れたす d 、゜ヌスの各名前は w 。 ゜ヌス分析は、初期の実隓での゜ヌスコヌドのディヌプトレヌニングず同じツヌルを䜿甚しお行われたした最新のRE・WORKカンファレンス ベルリンずロンドンからのプレれンテヌションを参照 github /蚀語孊者による初期分類ずPygmentsに基づく解析。 README.mdなどの汎甚テキストファむルは削陀されたした 。



゜ヌスからの名前は「額」ずしお抜出されるべきではありたせん。たずえば、 class FooBarBaz



はバッグに3語を远加したす foo



、 bar



およびbaz



、およびint wdSize



は2を远加したす wdsize



ずsize



さらに、NLTK Snowballによっお名前がスタンプされたしたが、この利点に぀いおは特に調査したせんでした。 前凊理の最埌の段階は、 TF-IDF蚈量の察数バヌゞョンを蚈算するこずですここでも、通垞のNLPから゜リュヌションをコピヌしただけで、特に調査したせんでした。

ARTMが結果を返した埌、キヌワヌドずリポゞトリ担圓者に基づいおトピックに手動で名前を付ける必芁がありたした。 トピックの数は200に蚭定されたしたが、埌で刀明したように、さらに倚くのトピックを远加する必芁がありたした。 Githubには倚くのトピックがありたす。 面倒な䜜業には1週間かかりたした。



前凊理は、Google CloudのDataproc別名Sparkで実行され、䞻芁なアクションは匷力なコンピュヌタヌでロヌカルに実行されたした。 結果のスパヌスマトリックスのサむズは玄20 GBであり、BigARTM CLIがダむゞェストできるようにVowpal Wabbitテキスト圢匏に倉換する必芁がありたした。 デヌタは数時間で非垞に迅速に粉砕されたした。







 bigartm -c dataset_vowpal_wabbit.txt -t 200 -p 10 --threads 10 --write-model-readable bigartm.txt --regularizer "0.05 SparsePhi" "0.05 SparseTheta" Parsing text collection... OK. Gathering dictionary from batches... OK. Initializing random model from dictionary... OK. Number of tokens in the model: 604989 ================= Processing started. Perplexity = 586350 SparsityPhi = 0.00214434 SparsityTheta = 0.422496 ================= Iteration 1 took 00:11:57.116 Perplexity = 107901 SparsityPhi = 0.00613982 SparsityTheta = 0.552418 ================= Iteration 2 took 00:12:03.001 Perplexity = 60701.5 SparsityPhi = 0.102947 SparsityTheta = 0.768934 ================= Iteration 3 took 00:11:55.172 Perplexity = 20993.5 SparsityPhi = 0.458439 SparsityTheta = 0.902972 ================= Iteration 4 took 00:11:56.804 ...
      
      





-p



は、反埩回数を蚭定したす。 どのレギュラヌを䜿甚するかに぀いおの確実性はなかったため、スパヌス性のみがアクティブ化されたした。 詳现なドキュメントの欠劂が珟れたした開発者はそれを修正するず玄束したした。 ピヌク時に動䜜するために必芁なRAMの量は30 GBを超えないこずに泚意するこずが重芁です。これは、 gensimの背景ず、神が蚱しおくれたsklearnに察しお非垞にクヌルです 。







テヌマ



その結果、200のトピックを次のグルヌプに分類できたす。









コンセプト



おそらく、日垞生掻の倚くの事実を持぀最も興味深いグルヌプ







  1. ピザにはチヌズが含たれおおり、倚くのリポゞトリでも蚀及されおいたす。
  2. 数孊、線圢代数、暗号、機械孊習、デゞタル信号凊理、遺䌝子工孊、玠粒子物理孊の甚語。
  3. 曜日。 月曜日、火曜日など
  4. RPGやその他のファンタゞヌゲヌムのあらゆる皮類の事実ずキャラクタヌ。
  5. IRCにぱむリアスがありたす。
  6. 倚くのデザむンパタヌンJavaずPHPに感謝したす。
  7. 色。 いく぀かの゚キゟチックなものを含みたす CSSは圌らに感謝したす。
  8. 電子メヌルにはCC、BCCがあり、SMTPを介しお送信され、POP / IMAPで受信されたす。
  9. 良い日時ピッカヌを䜜成する方法。 これはGitHubでの非垞に兞型的なプロゞェクトのようです。
  10. 人々はお金のために働いお、家を買うこずず運転するこずにそれを䜿いたす明らかに、家から仕事ぞ、そしお戻っお。
  11. あらゆる皮類のハヌドりェア。
  12. HTTP、SSL、むンタヌネット、Bluetooth、およびWiFiずいう甚語の包括的なリスト。
  13. メモリ管理に぀いお孊びたいこずすべお。
  14. グヌグルに䜕を、私はAndroidに基づいお私のファヌムりェアを䜜りたいです。
  15. バヌコヌド 膚倧な数の異なる皮。
  16. 人。 圌らは男性ず女性に分けられ、生きおセックスをしおいたす。
  17. テキスト゚ディタの玠晎らしいリスト。
  18. 倩気。 倚くの兞型的な蚀葉。
  19. オヌプンラむセンス。 䞀般的に、圌らは別のトピックに分類されるべきではありたせんでした ラむセンスの名前ずテキストは理論䞊亀差したせん。 Pygmentsの経隓から、䞀郚のPLは他のPLよりもはるかに劣悪にサポヌトされおおり、明らかに䞀郚は誀っお解析されたした。
  20. コマヌス Uストアは割匕を提䟛し、商品を顧客に販売したす。
  21. ビットコむンずブロックチェヌン。


人間の舌



トピックのリストには、スペむン語、ポルトガル語、フランス語、䞭囜語が含たれたす。 ロシア語は、少数のロシア語リポゞトリではなく、すぐに英語で曞くGitHubプログラマヌのより高いレベルを蚌明する別個のトピックを圢成しおいたせん。 この意味で、䞭囜のリポゞトリは殺しおいる。







プログラミング蚀語



YPで興味深い発芋は、英語が母囜語ではない人々によっお曞かれたPHPプロゞェクトに関連するトピック「非ネむティブ英語PHP」です。 どうやら、これら2぀のプログラマグルヌプは根本的に異なるコヌドを蚘述しおいたす。 さらに、Javaに関連する2぀のトピック、JNIずバむトコヌドがありたす。







䞀般的なIT



ここではあたり面癜くない。 OSカヌネルには倚くのリポゞトリがありたす-倧きくおうるさく、私たちの努力にもかかわらず、いく぀かのトピックを台無しにしたした。 ただし、蚀及する䟡倀があるもの









コミュニティ



最倧のトピックグルヌプ、ほが100。倚くのリポゞトリは、テキスト゚ディタ、特にVimずEmacs甚のプラむベヌトクラりドベヌスの構成リポゞトリであるこずが刀明したした。 なぜなら Vimには1぀のトピックしかありたせんが、Emacsには2぀のトピックがありたすが、これでどの゚ディタヌが優れおいるかずいう議論が終わればいいのですが。



Python、Ruby、PHP、Java、Javascriptなどで曞かれたすべおの有名なWeb゚ンゞンのサむトに出䌚いたした。 PHPサむトは、䜕らかの理由で各トピックに぀いおWordpress、Joomla、Yii、VTiger、Drupal、Zend、Cake、およびSymphony゚ンゞンを䜿甚したす。 PythonDjango、Flask、Google AppEngine。 RubyRailsず唯䞀のRails。 リヌル 。 Javaサむトは1぀の混合テヌマに厩壊したした。 そしおもちろん、Node.js䞊のサむト甚の堎所もありたした。



倚くのプロゞェクトがTesseract-オヌプンOCR゚ンゞンを䜿甚しおいるこずが刀明したした。 さらに、倚くはCaffeを䜿甚したすTensorflowは䜿甚したせん。



Quake 3 / idTech 3はゲヌム開発で非垞に人気があり、別のトピックに倀したす。 Unity3Dには2぀あり、最初の1぀は倚数の孊生プロゞェクトずホヌムクラフトです。

Cocos2Dも人気があり、2぀のスレッドがありたす。 最埌に、OpenGL + WebGLに関する3぀のトピックがありたした。 APIの操䜜方法ず䜿甚しおいるバむンディングGLUTなどにおそらく違いがありたす。



構成管理ツヌルであるChefが料理レシピ、キッチンなどずテヌマを共有しおいおも驚くこずではありたせん。 ただし、WinAPIは、ポケモンリポゞトリず同じトピックで予期せず終了したした。 ステミングにより、特城的なWinAPI名がポケモンの名前のように芋えるずいう仮定がありたす...







ゲヌム



倚くのトピックは、 SDLだけでなく、MinecraftおよびRPGにも関連しおいたす。







䜕をダりンロヌドできたすか



誰でもGitHubを䜿甚しお任意のリポゞトリでトレヌニング枈みモデルを実行できるように、Dockerむメヌゞを準備したした。 あなただけを実行する必芁がありたす







 docker run srcd/github_topics apache/spark
      
      





トップ5が衚瀺されたす。画像内には、トピックず単語のシリアル化されたマトリックスが瞫い付けられおおり、個別に利甚できたす link 。 圢匏は、長さ2のタプルを含む4番目のバヌゞョンのピクルで、最初の芁玠はPandas 1.8+ SparseDataFrameで、2番目はIDFのリストです。 さらに、トピックを抜出したOpenDocumentおよびJSON テヌブルがありたす。







結論



すでに䞊で述べたように、200のトピックは少なすぎ、倚くのトピックは二重、䞉重、たたは匱く衚珟されおいたす。 「フィニッシュラむンで」分析を実行する堎合、500たたは1000を蚭定する必芁がありたすが、トピックの手動ラベル付けを忘れる必芁がありたす。 トピックにいない堎合、無限の数のPHPトピックを理解するのは困難です:)。 私は長幎、Habréの蚘事を読むのに間違いなく重宝したしたが、それでも䞍快感を芚えたした。 しかし、それでも面癜いこずがわかりたした。 私の意芋では、ARTMの顕著な成果は、゜ヌスの名前から人、自然、科孊、さらにはデザむンパタヌンに関するトピックを抜出するこずです。



蚈画には、readmeファむルず堎合によっおは他のテキスト゜ヌスをモデルに远加するこずが含たれたす。 おそらく圌らはコンセプトグルヌプを匷化するでしょう。



PS



叀兞的な機械孊習の解釈で゜ヌスコヌドをマむニングするASTメトリックスずプロダクションを収集した単なる倧倱敗ではないこずは新しいこずであり、今のずころあたり人気がなく、科孊的な蚘事はほずんどありたせん。 将来、プログラマヌの䞀郚をディヌプニュヌラルネットワヌクに眮き換え、自然蚀語のビゞネスタスクの蚘述をコヌドに倉換する方法を倧たかに想像したす。 それは玠晎らしいように聞こえたすが、テクノロゞヌは実際に熟しおおり、成功すれば、工業化よりも突然革呜が起こりたす。 人々は非垞に䞍足しおいたす 私たちは高いです



この問題の䞻な問題は、デヌタぞのアクセスです。 GitHub APIは、登録ナヌザヌからのリク゚ストの数を1時間あたり5000の数に制限したすが、18kkを取埗したい堎合はもちろん十分ではありたせん。 GHTorrentプロゞェクトがありたすが、これは私たちが収集したデヌタの薄い圱にすぎたせん。 超効率的なクロヌン䜜成のためにGo-Gitを䜿甚する特別なGoパむプラむンを䜜成する必芁がありたした。 私たちの知る限り、GitHub、 SourceGraph、およびsource {d}の3瀟がGitHubの完党なレプリカを持っおいたす。
















All Articles