èæ¯
Qiita殿å å ¥ãèšäºããšãïŒã€ã®ã驿ã
è¯ãèšäºãªãã ãã©ãªããªãããããã€ããªãã£ãèšäºãã
AIã«ãã£ãŠçºæããããšãã詊ã¿ã
ãŸãã¯ãæ©æ¢°ã«ãã£ãŠããããããã©ãã倿ããããã
äœãããã«ãªãèšäºãªã®ããäºæž¬ããããšã¯å¯èœãªã®ãïŒãšããåé¡ãèããŠã¿ããã
以äžã®ïŒã€ã®èšäºã®äžã§ãå°ãäºåããŠããã
äžçªé£ããããªå
å®¹ã«ææŠããŠã¿ãã
- Qiita殿å å ¥ãèšäºã©ã³ãã³ã°ãäœã£ãç©èªïŒ2018/06/29æçš¿ïŒ
Qiitaã®èšäºããŒã¿ã®ååŸãšãå šäœæã«ã€ããŠèšèŒã
æ¢ã«ãããã倿°éããŠãããè¯èšäºãããæ®¿å å ¥ãããšããŠæããšã«ãŸãšãã
- çŽè¿ïŒå¹Žã®Qiitaèšäºåæã§åãã£ãïŒã€ã®ã驿ãïŒ2018/07/03æçš¿ïŒ
çŽè¿ã®èšäºããŒã¿ãããåŸååæã宿œãã
æ§ã ãªç¥èŠãæ°ã¥ããåŸãããšãåºæ¥ãã
äžã®èšäºãèªãã§ããªã人ãžã®ãŸãšããååãŸã§ã®ãããã
- Qiitaã®ããŒã¿ãåæãããã
- 2016幎4æã®èšäºã¯ã2018幎5æã«æ¯ã¹ãŠïŒåããããè²°ãããïŒä»æ§å€æŽåœ±é¿å€§ãããïŒ
- âåæãæ¯èŒã¯ãåºæ¥ãã ãæçš¿æ¥ã®è¿ãèšäºå士ãæãŸãããã
- æããšã«ãããããããé«ãèšäºã殿å å
¥ããšããŠã©ã³ãã³ã°åãããã
- TOP30èšäºïŒã0.38%ãã§ããã®æã®æçš¿ã«å¯Ÿãããããã®ã43.7%ã ãå ãããã
- ã©ã®èšäºãèªãã§ãé¢çœãããèŠãŠãã
- ããŒã¿ãåæããçµæãããããé¢çœãããšãåãã£ãããäžéšã玹ä»ãããã
- ãããããã®å¹³åå€ã¯8.02ãåå以äžã¯ïŒïœïŒããã£ã¡ãåã£ãŠãããã
- 人æ°ã®ã¿ã°ãããããããå€ãããã§ã¯ãªããŠããæ©æ¢°åŠç¿ããšããå€ããã ãªãã
- ãã¿ã°ããšãããããã®é¢ä¿è¡šããã¿ã°å士ã®é¢é£ãå³ç€ºããã°ã©ããäœã£ããã
ä»åããããããš
æåã«èšèŒããèå¯ã®çµæãããããããå€ãâè¯èšäºããšä»®å®ããã
ãæ®¿å å
¥ããã«éããçµæã¯ã©ããè¯èšäºã§ãä»®å®ã¯æ£ããã£ãã
ããããããããããå°ãªãâè¯èšäºã§ã¯ãªããã¯æãç«ããªãã
ïŒã€ã®ã驿ãã®çµæãèŠãŠãæãããªããã«ããããããã¯ãã¬ã³ã次第ã§å€§ããåãã
ãã®ããã人ã®ç®ã«ããŸãè§ŠããããŠããªãã£ããäžéãªè¯èšäºã倿°ç ã£ãŠããã®ã§ã¯ãªããïŒ
èªç¶èšèªåŠç/æ©æ¢°åŠç¿ãé§äœ¿ããŠãæµ·ã®åºã«ç ãè¯èšäºãçºæåºæ¥ãªãã ãããïŒïŒ
- 詊ããçµæãããªã®åºãŸãããã§çµããã«ããªãã
- 確ãã«è¯èšäºã£ãœãããšãããŸã§ããã¥ãŒãã³ã°ãè¡ãã
- ãã¥ãŒãã³ã°ã«ã¯ã極åã人éïŒç§ïŒã®äž»èгçãã¥ãŒãã³ã°ãå
¥ããªãã
- ïŒãåå¿è ãã¿ã°ã¯é¢çœãããšã決ãæã¡ã§ã¯ãªããæ°å€ãN以äžãåãããªã©ã§èª¿æŽïŒ
æ¬æçš¿ã®å 容
- çµè«/ææ ïŒ AIã«ãã£ãŠãè¯èšäºããšå€æããã100èšäºãå
Ž
- ãè¯èšäºãã¬ãã«ãå€å®ããããã°ã©ã ãåºæ¥ãã
- ãæç« çãªèšäºãã«åã£ãŠããŸã£ãæã¯ãããã®ã®ã
- è¯èšäºãªã®ã«ããããå°ãªããã®ãæœåºã§ãããããªæ°ãããã
- è¯èšäºãã©ããïŒã¯åã 人ã®å€æã«ãããšããã倧ããããã
- ææãšææ³ãå ¬éãããã£ãŒãããã¯ãåãããšã«ããã
- 詊è¡é¯èª€ã®éçšããåŠçã®ã³ãŒã/ããŠããŠãå ¬é
- 詊è¡é¯èª€â Doc2Vec
- ããã¹ãããã¯ãã«å/æ°å€ã«å€æããæè¡ã
- è¯èšäºãšã®è·é¢ãè¿ãèšäºïŒè¯èšäºããšããä»®å®ã¯æãç«ã€ã®ãïŒ
- 詊è¡é¯èª€â¡ ã¯ã©ã¹ã¿ãªã³ã°
- è¯èšäºãšãè¯èšäºã§ã¯ãªãïŒå€±ç€ŒïŒã¯ãã¯ã©ã¹ã¿ãªã³ã°ã«ãã£ãŠåé¡ããããïŒ
- 詊è¡é¯èª€â¢ æçµçã«ã¯äžèšçµã¿åããïŒãªãªãžãã«ããžãã¯ïŒ
- çµæã«è³ããŸã§ã®æçµèå¯ãšææ³ã
- ã³ãŒãã®å®è¡ç°å¢ã¯å šãŠãWindows10 + Python3 +JupyterNotebook ãåæã
åœå仮説
è¯èšäºã®é¡äŒŒèšäºã¯è¯èšäºïŒãšãã仮説ïŒDoc2Vec掻çšïŒ
Doc2Vecã䜿ããšãæç« ããã¯ãã«åããŠè¡šçŸããããšãåºæ¥ãã
ïŒWord2Vecãå¿çšããŠãæç« ã«é©çšåºæ¥ãããã«ãããããªãã®ïŒ
詳现ã¯ãã°ã°ãã°åºãŠããã®ã§çç¥ããã
ãã®æè¡ã䜿ãã°ãããèšäºã«å¯ŸããŠããæã䌌ãŠããèšäºã¯ã©ãïŒã
ãšãã£ãåœ¢ã§æ€çŽ¢ãåºæ¥ãã
ïŒãã ããæç« ããæ±ãã®ã§ã粟床ã«ã€ããŠã¯ãå¯ãã¬ãã«ïŒ
åãããŠããè¯èšäºïŒè€æ°ã®è¯èšäºãè¿ãã«å±
ãããšä»®å®ãããšã
ããèšäºã«å¯ŸããŠãé¡äŒŒèšäºã®TOP10ãªã©ãåºããŠã
**é¡äŒŒèšäºã®å¹³åãããå€ãé«ãèšäºã¯ãåãããè¯èšäºãªã®ã§ã¯ãªããïŒ**ãšãã仮説ãç«ãŠãã
åçš®åæ
å®è£ ã®è©±ã«è¡ãåã«ãããã€ãä»åã®åæãèšèŒããã
ä»å䜿çšããããŒã¿ã¯å
šãŠã2018幎6ææ«ããã«ååŸããã
2018幎05æã«æçš¿ãããèšäº ïœ 2017幎06æã«æçš¿ãããèšäº
ã®ããŒã¿ïŒ79072èšäºã«ã€ããŠæ±ã£ãŠããã
ãããããã®å€ã«ã€ããŠããããŒã¿ååŸæç¹ã®å€ã§ããã
Doc2Vecã®ã¢ãã«ãäœãæ¹æ³
Doc2Vecãäœãããã®åå å·¥åŠç
Doc2Vecã®ã¢ãã«ãäœãããã«ã¯ãåŠç¿çšã®ããŒã¿ãšããŠã
ãæç« ã®åå ïŒã¿ã€ãã«ãã¿ã°ïŒïŒ æç« ã®ããã¹ããåèªãªã¹ãåãããã®ã
ã®åœ¢ïŒTaggedDocument圢åŒïŒã«èšäºãå å·¥ããå¿
èŠãããã
圢æ çŽ è§£æã¯mecabïŒmecabã®èŸæžïŒipadic-neologdïŒã䜿çšããã
以äžã®ããã«ããŠå å·¥ããã
# åè©ãéå®ãããã¿ã°ããã¥ã¡ã³ããªã¹ãã®çæ
from gensim.models.doc2vec import Doc2Vec
from gensim.models.doc2vec import TaggedDocument
import MeCab
# Mecabã«ããè§£æã®å®éšïŒipadic-neologdã®èŸæžãæå®ããŠããã
text = 'æ¥æ¬èªã®èªç¶èšèªåŠçã¯é£ããããã'
tagger = MeCab.Tagger(r"-Ochasen -d .\mecab-ipadic-neologd")
result = tagger.parse(text)
print(result)
# ã¿ã°ããã¥ã¡ã³ãã®ãªã¹ããäœã
TaggedDocument_list=[]
# æçš¿èšäºããã¿ã°ããã¥ã¡ã³ãåããŠããã®ãªã¹ããäœã£ãŠããã
# å
šèšäºå¯Ÿè±¡ã«ããã
for item_info in item_info_list:
#æçš¿èšäºã®URLãšæ¬æïŒbody)ãåãåºãã
url_str=item_info[3]
body=item_info[9]
#ãâ
ããŒãã€ã©ã€ãºãå
¥ãã
normalized_body=normalize_neologd(body)
lines = tagger.parse(normalized_body).splitlines()
words = []
for line in lines:
chunks = line.split('\t')
#ãâ
ç¹å®ã®åè©ã«éå®ããŠå©çšããã
if len(chunks) > 3 and (chunks[3].startswith('åè©') or chunks[3].startswith('圢容è©') or (chunks[3].startswith('åè©') and not chunks[3].startswith('åè©-æ°'))):
words.append(chunks[0])
#TaggedDocumentã¯ã以äžã®ãããªåœ¢åŒã§çæãããã¢ãã«å©çšæã«ã¯ãtagsã®å€ã§ãã®ææžãæå®ããã
#TaggedDocument_pair = TaggedDocument(words=['åè©', 'åè©', '圢容è©', 'æ¥æ¬èª', 'åŠç', 'é£ãã'], tags=['d1'])
#ã¿ã°ã¯ãURLã«ããã
TaggedDocument_pair = TaggedDocument(words=words, tags=[url_str] )
TaggedDocument_list.append(TaggedDocument_pair)
print(len(TaggedDocument_list))
å å·¥ã®æã®ãã€ã³ãã¯ïŒç¹ããã
åœåã¯ãã ã®åãã¡æžãã§å®æœããŠããŠãçæããã¢ãã«ã®ç²ŸåºŠãå°ãæªãã£ãããã«ã
ãã®ïŒç¹ã®åŠçãå
¥ãããšãããDoc2Vecã®ç²ŸåºŠãåäžããã
- ç¹å®ã®åè©ã«çµã£ãŠå©çš
- ããŒãã©ã€ãº
ç¹å®ã®åè©ã«çµã£ãŠå©çšããã®ã¯ã
æå³ã®èãåèªããããããæ¶ããŠããã
æç« äžã®éèŠãªçšèªã ãæ±ãããã«ããããšã§ç²ŸåºŠãäžããããã
ããŒãã©ã€ãºã«ã€ããŠã¯ã以äžã®äŸãã€ã¡ãŒãžããããã
å
šè§ã®ã¢ã«ãã¡ãããã®å€æãå
šè§ã¹ããŒã¹ãåé€oråè§åãããããŠã
åãæå³ã®åèªããåã衚èšã«ãªãããã«ãæããããšã
normalize_neologd("åã¢ã«ãã¹ã®ãå€©ç¶æ°Žãïœïœïœïœïœïœïœãïœ
ïœïœïœãã¬ã¢ã³äžçµã")
# > 'åã¢ã«ãã¹ã®å€©ç¶æ°ŽSparking Lemonã¬ã¢ã³äžçµã'
ãã®é¢æ°ã¯ãmecab-ipadic-neologdã®ãããžã§ã¯ããã
ãã¯ã£ãŠããã³ããŒããŠããã ãã®ãã®ã§ãã³ãŒãã¯ä»¥äžã®éãã
# https://github.com/neologd/mecab-ipadic-neologd/wiki/Regexp.ja
# ããŒãã©ã€ãºïŒè©³çްã¯âã®URLãåç
§
# encoding: utf8
from __future__ import unicode_literals
import re
import unicodedata
def unicode_normalize(cls, s):
pt = re.compile('([{}]+)'.format(cls))
def norm(c):
return unicodedata.normalize('NFKC', c) if pt.match(c) else c
s = ''.join(norm(x) for x in re.split(pt, s))
s = re.sub('ïŒ', '-', s)
return s
def remove_extra_spaces(s):
s = re.sub('[ ã]+', ' ', s)
blocks = ''.join(('\u4E00-\u9FFF', # CJK UNIFIED IDEOGRAPHS
'\u3040-\u309F', # HIRAGANA
'\u30A0-\u30FF', # KATAKANA
'\u3000-\u303F', # CJK SYMBOLS AND PUNCTUATION
'\uFF00-\uFFEF' # HALFWIDTH AND FULLWIDTH FORMS
))
basic_latin = '\u0000-\u007F'
def remove_space_between(cls1, cls2, s):
p = re.compile('([{}]) ([{}])'.format(cls1, cls2))
while p.search(s):
s = p.sub(r'\1\2', s)
return s
s = remove_space_between(blocks, blocks, s)
s = remove_space_between(blocks, basic_latin, s)
s = remove_space_between(basic_latin, blocks, s)
return s
def normalize_neologd(s):
s = s.strip()
s = unicode_normalize('ïŒ-ïŒïŒ¡-ïœ-ïœïœ¡-ïŸ', s)
def maketrans(f, t):
return {ord(x): ord(y) for x, y in zip(f, t)}
s = re.sub('[ËÖââââââ»ââ]+', '-', s) # normalize hyphens
s = re.sub('[ï¹£ïŒïœ°ââââãŒ]+', 'ãŒ', s) # normalize choonpus
s = re.sub('[~âŒâŸãã°ïœ]', '', s) # remove tildes
s = s.translate(
maketrans('!"#$%&\'()*+,-./:;<=>?@[¥]^_`{|}~',
'ïŒâïŒïŒïŒ
ïŒâïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒ ¥ïœïœïœïœãããã»ãã'))
s = remove_extra_spaces(s)
s = unicode_normalize('ïŒâïŒïŒïŒ
ïŒâïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒ ¥ïœïœïœïœã', s) # keep ïŒ,ã»,ã,ã
s = re.sub('[â]', '\'', s)
s = re.sub('[â]', '"', s)
return s
Doc2Vecã®ã¢ãã«ã®çæ
æºåããTaggedDocument_listã®åŠç¿ãå®è¡ããã
ãªãã·ã§ã³ã®æå®ã®ä»æ¹ã«ãã£ãŠããªã粟床ã¯å€ããã
%%time
# åŠç¿å®è¡ïŒãã©ã¡ãŒã¿ã調æŽå¯èœïŒ
# documents:åŠç¿ããŒã¿ïŒTaggedDocumentã®ãªã¹ãïŒ
# min_count=1:æäœ1ååºçŸããåèªãåŠç¿ã«äœ¿çšãã
# dm=0:åŠç¿ã¢ãã«=DBOWïŒããã©ã«ãã¯dm=1:åŠç¿ã¢ãã«=DMïŒ
# model = Doc2Vec(documents=TaggedDocument_list, min_count=10, dm=0)
# iter:ãã¬ãŒãã³ã°ååŸ©åæ° ããã©ã«ãã¯ïŒïŒ
Doc2VecModel = Doc2Vec(documents=TaggedDocument_list, size=150, alpha=0.0015, sample=1e-4, min_count=10, workers=4, iter=30)
# åŠç¿ããã¢ãã«ãä¿å
Doc2VecModel.save('simple30_Doc2VecModel_150.model')
ä»åã®ãã€ã³ãã¯ããiterãã®æå®ã
ãã¬ãŒãã³ã°ååŸ©åæ°ãå°ãªããšã粟床ãåºãªãã£ãã
å®è¡åæ°ã«ã€ããŠã¯ãããå°ãè€éãªèšç®ããããŠã
åçã«æ±ºããŠããã³ãŒãäŸèŠåãããããã
ããŸãåã£ãããšããããªããŠããäœåºŠããã£ãŠã¿ãŠã
è¯ããããªå€ã«ããã°è¯ããšæããæ°ååçšåºŠã§çµããã
åœåããã®èšå®ãããã«å®æœããŠããŠç²ŸåºŠãåºãªãã£ãã
次ã«ãåã£ãã³ãŒãã宿œããŠãããã
æçµçã«iterã®æ°ãå¢ããã ãã§ãåã£ãã³ãŒããšåç以äžã®çµæã«ãªã£ãã
ããã§ãã粟床ããšèšã£ãŠããã®ã¯ãDoc2Vecã®ç²ŸåºŠã§ã¯ãªãã
Word2Vecã®çµæã®çŽåŸæã®ããšã
Doc2Vecã¢ãã«ãäžèšã®æ¹æ³ã§äœããšãåãããŠWord2Vecã¢ãã«ãçæãããã
æç« ã®é¡äŒŒåºŠãã人ã®ç®ã§å€æããããšã¯é£ãããã
åèªã®é¡äŒŒåºŠãã§ããã°ãçŽåŸæããããã©ãããã§äœãšãªãåããã
å
·äœçã«ã¯ã次ã®ãã¢ãã«ã®å
容確èªã®ã³ãã³ãçµæãèŠãŠã
ãã©ã¡ãŒã¿ã®ãã¥ãŒãã³ã°ãæ€èšããŠãããšããããã
äœæããã¢ãã«ã®å 容確èª
äœæããDoc2Vecã¢ãã«ã§ãã©ããªææãåŸããã®ãéãã§ã¿ã確èªããŠã¿ãã
以äžã®ã³ãŒãã«ãã£ãŠã
ããèšäºã«äŒŒãèšäºãæ¢ãããã
ããåèªã«äŒŒãåèªãæ¢ãããïŒWord2Vecæ©èœïŒã宿œã§ããã
model = Doc2VecModel
# ãã¡ã€ã«ããããŒãããå Žåã¯ä»¥äžïŒ
# model = Doc2Vec.load('simple30_Doc2VecModel_150.model')
# ãã¯ãã«'d1'ã衚瀺ïŒåã¯numpy.ndarrayïŒ
# print(model.docvecs['d1'])
# åææžãšãæãé¡äŒŒåºŠãé«ãææžã衚瀺ïŒããã©ã«ãå€ïŒ10åïŒ
print(model.docvecs.most_similar('https://qiita.com/youwht/items/f21325ff62603e8664e6', topn=3))
print(model.most_similar(positive=u"python", topn=10))
print(model.most_similar(positive=u"ããã°ã©ã ", topn=10))
print(model.most_similar(positive=u"éçº", topn=10))
print(model.most_similar(positive=u"ã¢ããª", topn=10))
print(model.most_similar(positive=u"æ©æ¢°åŠç¿", topn=10))
ã¢ãã«ã®å 容確èªçµæïŒ
ã³ãŒãäžã®URLã瀺ãã®ã¯ã察矩èªã®èšäºã
ãèµ€ã®ä»äººãã®å¯ŸçŸ©èªã¯ãçœãæäººã ãããèªåçæãããç©èª
ã®èšäºã«äŒŒãŠãããšå€æãããããšã£ãŠããšã£ãŠãäžåèªãªèšäºTOPïŒã¯ã»ã»ã»
ïŒâ»2018幎5æïœ2017幎6æã®å
š79072èšäºäžããéžã°ããTOP3ïŒ
- ïŒäœïŒ TensorFlowã§Yahoo!ãã¥ãŒã¹ã®ã«ããŽãªãåé¡ããŠã¿ã
- ïŒäœïŒå®¶èšç°¿ã®åºè²»é ç®ã«ã«ããŽãªãä»ããã®ãèªååãã
- ïŒäœïŒåç»ã¿ã€ãã«ããYouTuberãåœãŠã
æå€ãšäŒŒãŠããæ°ãããªãã§ããªãã»ã»ã»ïŒå€±ç€ŒïŒã
ãŸããWord2Vecã¢ãã«ãåãããŠçæãããã®ã§ã
ãããã䌌ãŠããäžäœïŒïŒåèªã瀺ããŠã¿ãã
| é äœ | python | ããã°ã©ã | éçº | ã¢ã㪠| æ©æ¢°åŠç¿ |
|---|---|---|---|---|---|
| ïŒäœ | py | ã³ãŒã | æ§ç¯ | ã¢ããªã±ãŒã·ã§ã³ | ãã£ãŒãã©ãŒãã³ã° |
| ïŒäœ | Python | ã¹ã¯ãªãã | éçºäž | ç»é¢ | DeepLearning |
| ïŒäœ | pip | ãœãŒã¹ã³ãŒã | ã¢ããªéçº | ç«¯æ« | èªç¶èšèªåŠç |
| ïŒäœ | numpy | ãµã³ãã« | æŽå | ãã©ãŠã¶ | 深局 |
| ïŒäœ | pyhon | ãœãŒã¹ | å°å ¥ | ãããžã§ã¯ã | 匷ååŠç¿ |
| ïŒäœ | bash | ã€ã³ã¿ããªã¿ | æŽãã | app | ããŒã¿ãµã€ãšã³ã¹ |
| ïŒäœ | conda | å®è¡ | éçºè | ãµãŒãã¹ | 人工ç¥èœ |
| ïŒäœ | jupyter notebook | å®è¡ãã¡ã€ã« | éçš | ããã〠| Deep Learning |
| ïŒäœ | pytest | åäœ | ãããã¯ã·ã§ã³ | ãã°ã€ã³ | ææ |
| 10äœ | venv | åã | ç°å¢ | ã¢ã€ã³ã³ | ã¢ããªã³ã° |
pythonã®ïŒäœã®ãpyhonãã¯ãè¡æçãªããšã«ã
ã¿ã°ãšããŠãå©çšãããŠããŠã2018幎7ææç¹ã§ã10æçš¿ãããŠããã
ïŒåãããèŠçŽããŠããŸã£ã
èšäºæ°ããã£ãšå¢ããã°ãWord2VecãšããŠã®ç²ŸåºŠã¯ããã«äžããããšãåºæ¥ãå°è±¡ã
ããçšåºŠçŽåŸæã®ããé¡äŒŒæ€çŽ¢çµæã§ããããã
ãã®ã¢ãã«ãªãã°ãæç« ã®é¡äŒŒãããããŠãäžæããã£ãŠãããã ããããšå€æã
ãªããã³ãŒããããã¯ãèæ
®ããã«å®è¡ããŠããã®ã ãã
ã³ãŒããããã¯ã¯åºãŸãã«ãªã£ãŠããããã«ã
èªåçã«äžæãåãããŠããããšæã£ãŠããéãã®çµæã«ãªã£ãã
ïŒäŸãã°ãifãã®é¡çŸ©èªã¯ãelse, return, continue, elseifã»ã»ã»ãšç¶ããïŒ
æåããè¯ãçµæãæç€ºããŠãããã
äžèšã§äœç¹ãäžãããã€ã³ããå®è¡ããåã®çµæã¯ä»¥äžã®éããå
šç¶éãããã¡ãã¡ã
ãããã£ãWord2Vecã®çµæãèŠãªãããã©ã®çŽåŸã®ããæãã«ãªããŸã§èª¿æŽããã®ã ã
| é äœ | python | ããã°ã©ã | éçº | ã¢ã㪠| æ©æ¢°åŠç¿ |
|---|---|---|---|---|---|
| ïŒäœ | py | ãŸã | åã | ã¢ã«ãŠã³ã | åºç€ |
| ïŒäœ | ruby | æ€èšŒ | ããŒã« | 管ç | åŠã¶ |
| ïŒäœ | pip | ãã¹ã | ç | ãã©ãŠã¶ | ããã°ã©ãã³ã° |
| ïŒäœ | numpy | å°å ¥ | æŽå | 飿º | ãã£ãŒãã©ãŒãã³ã° |
| ïŒäœ | go | éã | æ§ç¯ | ã¢ããªã±ãŒã·ã§ã³ | åå¿è |
| ïŒäœ | pwn | æ¡åŒµ | ãã¬ãŒã ã¯ãŒã¯ | ãµãŒãã¹ | æè¡ |
| ïŒäœ | #!/ | è¡ã | éçºè | ãããžã§ã¯ã | ç¥è |
| ïŒäœ | sh | ãšãã | ç¡æ | Slack | åã |
| ïŒäœ | keras | å®é | 飿º | ãœãŒã¹ | AI |
| 10äœ | pandas | æäœ | ãã¥ãŒããªã¢ã« | é¢é£ | æ¬ |
ãããŸã§ã®çµæåŸãããã¢ãã«ã䜿ã£ãŠãããããéã¹ããã
ä»åã®ç®çã«æ»ã£ãŠã
ãè¯èšäºã®é¡äŒŒèšäºã¯è¯èšäºããæãç«ã€ã®ãèããŠã¿ããã
è¯èšäºã®é¡äŒŒèšäºã®ãããæ°ã調ã¹ã
æ¢ã«èªèãããŠããè¯èšäºïŒä»åã¯ïŒïŒïŒããã以äžã®èšäºãšçœ®ãïŒã«å¯ŸããŠã
é¡äŒŒèšäºã®å¹³åãããå€ã調ã¹ãŠã¿ãã
# URLãããŒã«ããèŸæžåã«ããŠããã
url_key_dict={}
for item_info in item_info_list:
url_key = item_info[3]
url_key_dict[url_key] = item_info
print(len(url_key_dict))
topnNO=30
# å
šéšã®èšäºURL(key)ã«å¯ŸããŠ
ruiji_iine_list=[]
for kiji_url in url_key_dict.keys():
moto_kiji_iine = url_key_dict[kiji_url][0]
#300ããã以äžã®èšäºã«å¯ŸããŠã¯ãé¡äŒŒèšäºãååŸããã
if moto_kiji_iine >299 :
sim_kiji_list = model.docvecs.most_similar(kiji_url,topn=topnNO)
iinesuu_list=[]
iinesuu_list.append(moto_kiji_iine)
for sim_kiji in sim_kiji_list:
sim_kiji_url=sim_kiji[0]
sim_kiji_iine=url_key_dict[sim_kiji_url][0]
iinesuu_list.append(sim_kiji_iine)
ruiji_iine_list.append(iinesuu_list)
print(len(ruiji_iine_list))
total_val=0
moto_total_val=0
for iinesuu_list in ruiji_iine_list:
moto_total_val+=iinesuu_list[0]
for val in range(topnNO):
total_val+=iinesuu_list[val+1]
print(total_val/topnNO/len(ruiji_iine_list))
print(moto_total_val/len(ruiji_iine_list))
çµæïŒ
ïŒïŒïŒããã以äžã®èšäºïŒå¹³åãããå€648.6ïŒã®ã
åé¡äŒŒèšäºTOP30ã®ã
å¹³åãããæ°ã¯ãã35.7ãã«ãªã£ãã
ãã€ã³ãã¯ã
çŽè¿ïŒå¹Žã®Qiitaèšäºåæã§åãã£ãïŒã€ã®ã驿ã
ã®å
容ã§èŠãéããå
šèšäºã®å¹³åãããå€ã¯ãïŒãã§ããããã
ã35.7ãã¯ããªãé«ãæ°åã§ããã
ããããäžèšã®ããã°ã©ã ã®ã䌌ãŠãããã®ç¯å²ïŒTOPããã€ãŸã§ãïŒãåºããã»ã©ã
å¹³åå€ã¯äžãã£ãŠããããšã倿ããã
è¯èšäºã«äŒŒãŠãã床ãé«ãã»ã©ãå¹³åå€ãé«ããšããããšã
ããã«ãå¹³å300以äžã®èšäºã§ã¯ãªããå¹³å100以äžã®èšäºã察象ã«ããŠãã
åæ§ã®çµæã«ãªããïŒå¹³åå€ã¯å°ãäžããïŒ
- ã300以äžããTOP10ãâã42.9ã
- ã300以äžããTOP30ãâã35.7ã
- ã300以äžããTOP50ãâã33.9ã
- ã100以äžããTOP10ãâã36.2ã
- ã100以äžããTOP30ãâã30.1ã
- ã100以äžããTOP50ãâã28.1ã
ãªãããããæ°ã®ææ°çãªååžç¶æ³ãèãããšãæ¬æ¥ã¯ãå¹³åãã§ã¯ãªãã
察æ°åããå¹³åãªã©ãèŠãã»ããè¯ããšæãããã®ã ãã
倧ãããå°ããããšããã¬ãã«ã§ã¯åœ±é¿ã¯å°ãªãã®ã§ãåçŽå¹³åã§è©±ãé²ããã
ã€ãŸããä»åäœã£ãã¢ãã«ã䜿ããšã
ãããæ°ã®é«ãèšäºã«äŒŒãŠããèšäºã¯ããããæ°ãé«ã
ãšããé¢ä¿ãæç«ããŠããã
ã¿ããªãããããããèšäºã«ã¯ãç¹åŸŽãããããšããããšã§ããã
ä»åäœæããDoc2Vecã¢ãã«ãããã®ç¹åŸŽã®äžéšãæããŠããããšããããšã«ãªãã
ãããŸã§æç¢ºãªåŸåãåºãŠãããšå€§ããªåžæã ã
ããšã¯ãéã«ã
ãé¡äŒŒèšäºã®å¹³åãããå€ãé«ãã®ã«ãèªåèªèº«ã®ãããå€ãå°ãªãèšäºã
ãèŠã€ããã°ããã®ã ïŒ
åãããè¯èšäºã®çºæâ倱æ
ãããŸã§é 調ã«ãã£ããã«èŠãããã
æåŸã®ç ŠãåŸ
ã£ãŠããŠããã®æ¹æ³ã§ã¯äžæããããªãã£ãã
äžèšã§è¯èšäºã ãã察象ã«ããŠããé¡äŒŒæ€çŽ¢ïŒå¹³åèšç®åŠçãã
å
šèšäºã察象ã«ããŠå®æœãã
ãé¡äŒŒèšäºã®å¹³åãããå€ãé«ãã®ã«ãèªåèªèº«ã®ãããå€ãå°ãªãèšäºã
ããã£ã«ã¿ãªã³ã°ããŠåºããã
確ãã«ãããã€ãã¯ãããããå°ãªãã®ã«é¢çœãèšäºãèŠã€ãã£ãã®ã ãã
é¢çœããªãèšäºããæžãæ¹çã«ã€ãã€ããªèšäºãããªããããããŠããŸã£ãã
ç§ã®äž»èгçã«ã¯ãã¡ãšããã ãã§ãããä»ã®äººãèŠãã°é¢çœããããããªãã
ãšããã®ã¯å€ã
ããã€ã€ããå°ãèå¯ããããšã»ã»ã»
ãè¯èšäºãã§ãããæ°ãããªãé«ãèšäºã§ããDoc2Vecã¢ãã«äžã§ã¯ã
é¢çœããªãèšäºã«è¿ããšåé¡ãããŠããŸãããšããŸãŸããããºã
å
šäœçãªå¹³åãåãã°ãé¢çœãåŽã«åé¡ãããããšãå€ãã®ã ãããã
åå¥äºäŸã100%ã®ç²ŸåºŠã«ãªã£ãŠããããã§ã¯ç¡ãã
ãã®ããéåŽããèŠããšãããããèšäºãšé¡äŒŒããŠããé¢çœããªãèšäºã¯ã
ãé¡äŒŒèšäºã®å¹³åãããå€ããé«ããªã£ãŠããŸãã
ãã®ãããé¢çœããªãèšäºãçµæ§åºãŠããŠããŸãã®ã§ã¯ãªããïŒ
å¹³åã§èŠãã°Dco2Vecã¢ãã«ã¯ãããã倿ããåºæ¥ãŠããŠãã
åå¥äºäŸã§äœ¿ãããšãããšããã®ã¬/誀æ€ç¥ãå€ããšããããšã
ãã®ä»¶ã«é¢ããŠã¯ããã®èšäºãã€ãã€ãã ã£ããã¿ãããªèå¯ã¯å€§å€å€±ç€Œãªã®ã§ã
ã³ãŒããšçµæèšèŒã¯å·®ãæ§ããããšã«ããã
äžå¿ãäžèšã®ã³ãŒãã«å ããŠã
ãèªåèªèº«ã®ãããå€ãå¹³åå€ïŒä»¥äžã§ããã
ã¿ãããªæ¡ä»¶ãå
¥ããã°ããªã粟床ã¯è¯ããªãïŒé¢çœãèšäºãèŠã€ããïŒã®ã ãã
èªåèªèº«ã®ãããå€ãåç
§ãããããªããžãã¯ã§ã¯ã
ãåãããè¯èšäºãçºæãšããŠçžå¿ãããªããã
ããã§çºæåºæ¥ãŠãããã°ã©ã ã®åãšèšãã«ããããããããŸã§ãã
ãããèšäºã®æç« ã ããæ©æ¢°ãèŠãŠãä»ã®è¯èšäºã®ãµã³ãã«ãã顿šããçµæã
ãšããããžãã¯ã ãã§çºæåºæ¥ãæ¹åãç®æãã
ïŒåçŽã«è¯èšäºãèŠã€ãããã ããªãã°ãèªèº«ã®ãããå€ã§ã®
ããã£ã«ã¿ãå
¥ããæ¹ã䜿ããããããä»åã¯ãæ©æ¢°ãèŠã€ãããããïŒ
ãã®æ¹ãããŒãã«ãããã®ã§ãããã¯ãããªããããšããããšïŒ
ãããã©ãããã®ïŒ
æ£çŽããã®æç¹ã§ã¯çµæ§å°ã£ãŠããã
ä»åã®è©Šã¿ã¯å€±æ or é¢çœããªããããããªããšæã£ãŠããã
æãã€ããã¢ã€ãã¢ã¯ã
ïŒä»¶ïŒä»¶ã®èšäºãåå¥ã«ç¢ºèªããŠããã®ã§ã¯ãªãã
**ãŸããã£ãããšãã¹ãžã®è¯ããããªèšäºããã¹ãžã®æªãããªèšäºã
ãããã«åé¡ããããšã¯åºæ¥ãªãã ãããïŒ**ãšãããã®ã
ãã¹ãžã®è¯ããããªèšäºãã«çµãã°ã
ããã¯ãèªåèªèº«ã®ãããå€ãå¹³åå€ïŒä»¥äžã§ããããšãããã£ã«ã¿ãš
åããããªãã£ã«ã¿ãšããŠäœ¿ããã ããããšããããšã
第äºä»®èª¬ïŒè¯èšäºã®ãã£ããåé¡
Doc2Vecã¢ãã«èªäœã¯ãïŒåå¥ã«èŠããšèª€å·®ãå€ããã®ã®ïŒ
ããçšåºŠã®æ¹åæ§ã瀺ããã®ãšããŠã¯æ©èœããŠãããšæãããã
ãã®ããããã¯ã©ã¹ã¿ãªã³ã°ãã«ãã£ãŠã
èšäºãåé¡ãããšããããšã詊ããŠã¿ãã
ã¯ã©ã¹ã¿ãªã³ã°ã¯ããã¿ã°ãïŒpythonãrubyãªã©ïŒã®
èªååé¡ãªã©ã®ããã«çšããããããšãå€ãæ°ãããã
ããããä»åã¯æ¢ã«ãDoc2Vecã®ã¢ãã«ã«ããããé¡äŒŒåºŠããèŠãŠã
ãåãã¿ã°ãªãã°é¡äŒŒåºŠãè¿ãããšããç¶æ
ã§ã¯ãªã
ïŒâ»ãããããããªããã確èªã¯ããŠããªãïŒã
ããããæ°ãè¿ãå Žåã¯é¡äŒŒåºŠãè¿ãããšããåŸåãå€å°ã¯ããã
ãšããããšã¯ç¢ºèªæžã¿ã§ããããã
ãã®ãŸãŸåŒ·åŒã«k-meansãé©çšããŠã
ãããæ°ãé«ãèšäºçŸ€ãäœãèšäºçŸ€ãã«åãããããšãæåŸ
ããã
ã¯ã©ã¹ã¿ãªã³ã°åŠçã®å®è£
ä»åã¯ãk-meansã§ãïŒïŒåã®ã¯ã©ã¹ã¿ã«åããŠã¿ãŠã
åã¯ã©ã¹ã¿ã®åæ°ããå¹³åãããæ°ãªã©ã確èªããŠã¿ãã
ãŸãã¯ãã¯ã©ã¹ã¿ãªã³ã°ãã®ãã®ã®åŠçãè¡ãã
from collections import defaultdict
from gensim.models.keyedvectors import KeyedVectors
from sklearn.cluster import KMeans
import pickle
key_list = range(len(model.docvecs))
print(len(key_list))
# ãã¯ãã«è¡šçŸã ãã²ãããåãåºããŠvectorã«è©°ã蟌ãã
vectors = [vector for vector in model.docvecs]
print(len(vectors))
# print(vectors[5])
# ã¯ã©ã¹ã¿æ°ã¯ãå
ã«æå®ããããããã¯ã©ã¹ã¿ãªã³ã°åŠç
n_clusters = 30
kmeans_model = KMeans(n_clusters=n_clusters, verbose=1, random_state=42, n_jobs=-1)
kmeans_model.fit(vectors)
# pickleã§åºæ¥ãã¢ãã«ã¯ä¿åããŠããã
with open(r'doc2vec_30_kmeans_model_30_150.dump', mode='wb') as f:
pickle.dump(kmeans_model, f)
# ã¯ã©ã¹ã¿ãªã³ã°ã®ã©ãã«ãäœã
key_list=[]
for item_info in item_info_list:
iine=item_info[0]
key_list.append(item_info[3])
print(len(key_list))
# print(key_list[5])
cluster_labels = kmeans_model.labels_
cluster_to_words = defaultdict(list)
for cluster_id, word in zip(cluster_labels, key_list):
cluster_to_words[cluster_id].append(word)
# ã¯ã©ã¹ã¿ããçµæã衚瀺(åã¯ã©ã¹ã¿ããšã«ïŒURLã ããµã³ãã«è¡šç€º)
for words in cluster_to_words.values():
print(words[:3])
ãã®ç¶æ
ã§ãDoc2Vecã¢ãã«ã®è·é¢ãè¿ãèšäºå士ã§ã
ïŒïŒåã«åé¡ããããšããããšã«ãªãã
åã¯ã©ã¹ã¿ã®æ å ±ã確èª
åã¯ã©ã¹ã¿ã«å¯ŸããŠãããããäžèšãç®åºããã
- ãã®ã¯ã©ã¹ã¿ã«å«ãŸããèšäºã®åæ°
- ãããã®åèšå€
- ãããã®å¹³åå€
- ãããã®äžå€®å€
- ãããã®ãlog2ããåã£ãå€ã®å¹³åå€
ç¹ã«ããããã®ãlog2ããåã£ãå¹³åå€ãã
äžå®å€ä»¥äžã®ã¯ã©ã¹ã¿ã¯ãè¯èšäºéå£ã®å¯èœæ§ãããã
ä»ãŸã§ã¯ãåçŽå¹³åã§èŠãŠããããæ¯æ°ãæžã£ãéå£ã«ãªããšã
åçŽå¹³åã¯é©åã§ã¯ãªããäŸãã°ã
ãïŒããïŒããïŒããïŒããïŒïŒïŒïŒãâå¹³åïŒïŒïŒ
ãïŒïŒããïŒïŒããïŒïŒããïŒïŒããïŒïŒãâå¹³åïŒïŒ
ãã®å Žåãäžã®éå£ã®ã»ããæ¬²ãããïŒè¯èšäºéå£ã¯äžã®éå£ïŒ
log2ããšã£ãå¹³åã§èŠããšã
ãïŒããïŒããïŒããïŒããïŒïŒïŒïŒãâå¹³å 2.8
ãïŒïŒããïŒïŒããïŒïŒããïŒïŒããïŒïŒãâå¹³å 4.6
ãã®äŸã®ããã«ã 誀差çã«å ¥ã£ãŠããŸã£ãäžã€ã®é«ãããèšäºã«ããã
åçŽå¹³åã¯ç Žå£ãããŠããŸããããlog2åŽã§èŠãã®ã ã
import statistics
import math
import pandas as pd
super_osusume_list=[]
for url_strs in cluster_to_words.values():
iine_list=[]
iine_log_list=[]
#print(len(url_strs))
#ãããæ°ããã°ãããæ°ã®ãªã¹ããçæã
for url_str in url_strs:
iine=url_key_dict[url_str][0]
iine_list.append(iine)
log_2_iine=math.log(iine+1, 2)
iine_log_list.append(log_2_iine)
kosuu = len(iine_list)
totalsum = sum(iine_list)
mean = statistics.mean(iine_list)
median = statistics.median(iine_list)
log_mean = statistics.mean(iine_log_list)
outputlist=[kosuu,totalsum,mean,median,log_mean]
print(outputlist)
if log_mean>3.0:
print(u"âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã")
for url_str in url_strs:
super_osusume_list.append(url_str)
print(len(super_osusume_list))
log2ã®å¹³åå€ãäžå®ã®ã¯ã©ã¹ã¿ãã©ããèŠããããããã
ã²ã©ãã³ãŒãã
èšäºã®åæ°ããããåèšå€ãå¹³åå€ãäžå€®å€ããlog2ããåã£ãå€ã®å¹³åå€
ã®ãªãã³ã§è¡šç€ºããŠããã
[20279, 86803, 4.280437891414764, 1, 1.4025844646740377]
[732, 2150, 2.9371584699453552, 1.0, 0.9005997411336497]
[1984, 27188, 13.703629032258064, 4.0, 2.556772511011302]
[1724, 18076, 10.48491879350348, 4.0, 2.41081308764506]
[24312, 49699, 2.0442168476472524, 1.0, 0.9730674856456951]
[8187, 72085, 8.804812507634054, 2, 1.8539635079080152]
[3025, 20874, 6.900495867768595, 2, 1.8217969402674867]
[718, 11084, 15.437325905292479, 4.0, 2.594425110439478]
[1805, 30528, 16.913019390581717, 5, 2.646739678414474]
[2828, 20459, 7.234441301272985, 2.0, 1.925711294559684]
[493, 5045, 10.233265720081135, 3, 2.1077944304651517]
[492, 3747, 7.615853658536586, 2.0, 1.8214605320444002]
[426, 4190, 9.835680751173708, 2.0, 1.8648483554057411]
[2471, 18732, 7.580736543909349, 3, 1.9783958575503753]
[136, 3358, 24.691176470588236, 7.0, 3.2308068296130306]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[826, 15354, 18.588377723970943, 6.0, 2.849973539814431]
[1580, 41598, 26.327848101265822, 6.0, 3.0348010258987252]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[2307, 80924, 35.07758994364976, 5, 2.924070196663596]
[2115, 29439, 13.919148936170213, 3, 2.2782404704806263]
[633, 12045, 19.028436018957347, 5, 2.6515975462456294]
[88, 6357, 72.23863636363636, 9.0, 3.6168170882385287]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[434, 4606, 10.612903225806452, 4.0, 2.437344518113521]
[382, 42430, 111.07329842931937, 10.0, 3.9578317001193537]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[58, 177, 3.0517241379310347, 1.0, 1.4149235500639377]
[327, 11766, 35.981651376146786, 8, 3.3305086025506463]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[227, 2475, 10.90308370044053, 4, 2.439790206051181]
[32, 177, 5.53125, 2.0, 1.7983720785655]
[298, 7369, 24.72818791946309, 6.0, 3.0091577507563905]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[116, 5454, 47.01724137931034, 6.0, 3.13154297919538]
âãããããã®ã¯ã©ã¹ã¿å
ã®å¹³åãé«ã
[37, 304, 8.216216216216216, 4, 2.1762433527742653]
2927
ïŒåã®ãè¯èšäºã¯ã©ã¹ã¿ããååšããŠããã
ãã®ãè¯èšäºã¯ã©ã¹ã¿ãã«å±ããèšäºã¯ã2927åãããšããããšã
ãããã®åçŽå¹³åå€ã§èŠãŠããçµæ§é«ãã
ã¯ã©ã¹ã¿ã«ãã£ãŠãèšäºã®åæ°ãããªãéããåºãŠããç¹ã«æ³šç®ãããã
ã»ãšãã©ã®èšäºã¯ããããããéåžžã«å°ãªãç¶æ³ã§ããã
ãŸããåæ°ãå€ãã¯ã©ã¹ã¿ã¯å¹³åãããŸãé«ããªãããããããã
ããµã€ãŒã®èšäºãã«åé¡ãããŠããŸã£ããã®ãéããããŠããã®ãããããªãã
ã¯ã©ã¹ã¿éã®å¹³åå€ãçµæ§å·®ãåºãŠããããã«ã
è¯èšäºã®ãã£ãã倿ãã¯ããçšåºŠæåãããšèããããã
å š79,072èšäºäžã2,927èšäºããè¯èšäºçãªåé¡ãšå€æããã
æçµå®è£
ããããŸããè¶
é·ãæŠãã«ãªã£ãŠãããã
ããããæåŸã®å®è£
ã
ãããŸã§ã®ããŠããŠãçµã¿åãããŠã
æ¬åœã«æ©æ¢°ã倿ããè¯èšäºãæœåºããã
ã¯ã©ã¹ã¿ãªã³ã°ã§å€æãããè¯èšäºçŸ€ã«å¯ŸããŠã
ããããé¡äŒŒèšäºã®å¹³åå€ã®èšç®ã宿œãã
ãã®æ°å€ã®é«ããã®ã¯ãAIã倿ããè¯èšäºã§ããã
ãããŸã§ã®åŠçã®çµã¿åãã倿ã«ãã£ãŠã
粟床ãåäžããããšããã¯ã±ã
èªèº«ã®ããããäœããã®ãåºãŠããã°ã
ããã¯äººãããããã€ããªãã£ãããåãããè¯èšäºããšããããšã
åããããã®ã ã衚瀺ããŠãããšã
ãã©ã®èšäºã«äŒŒãŠããããããã倿ãããŠãããã ãïŒïŒã
ã£ãŠããšãåãããªããªã£ãŠããŸãããã
æ¢ã«å€æ°ã®ããããéããŠããèšäºãå«ããŠã
BEST100ãæœåºããŠã¿ããïŒ
AIã倿ããè¯èšäºBEST100ã®æœåºåŠç
- ãã®ã¬ãæžãããããé¡äŒŒTOP300ãšå°ãç¯å²ãåºããã
- ã©ããªã¿ã°ãä»ããŠããã®ãèå³ããããããã¿ã°ã衚瀺ãã
topNo=300
url_iine_ruiji_log_list=[]
for url_str in super_osusume_list:
sim_kiji_list = model.docvecs.most_similar(url_str, topn=topNo)
total_ruiji_iinesuu=0
total_ruiji_iinesuu_log=0
for sim_kiji in sim_kiji_list:
sim_kiji_url = sim_kiji[0]
sim_kiji_iine = url_key_dict[sim_kiji_url][0]
total_ruiji_iinesuu += sim_kiji_iine
#ïŒã®ãã°ãåããªãããã«ãã察å¿
sim_kiji_iine+=1
total_ruiji_iinesuu_log += math.log(sim_kiji_iine,2)
#éåžžã®å¹³åå€ããã°ãåã£ãå¹³åå€ãèšç®
ruiji_iine_ave = total_ruiji_iinesuu/topNo
ruiji_iine_log_ave = total_ruiji_iinesuu_log/topNo
moto_iine = url_key_dict[url_str][0]
title = url_key_dict[url_str][1]
tag_name_list=[]
for tag_data in url_key_dict[url_str][2]:
tag_name_list.append(tag_data["name"])
url_iine_ruiji_log=[url_str,title,moto_iine,ruiji_iine_ave,ruiji_iine_log_ave,tag_name_list]
url_iine_ruiji_log_list.append(url_iine_ruiji_log)
url_iine_ruiji_log = pd.DataFrame(url_iine_ruiji_log_list,
columns=['url_str', 'title', 'moto_iine', 'ruiji_iine_ave','ruiji_iine_log_ave','tag_name_list'])
url_iine_ruiji_log = url_iine_ruiji_log.sort_values(by='ruiji_iine_log_ave', ascending=False)
# ã«ã©ã å
ã®æåæ°ã®èšå®å€æŽïŒURLãéäžã§è¡šçŸãããããšã«ãªããããã©ã«ãã¯50ãã倿Žããã
pd.set_option("display.max_colwidth", 120)
# è¡æ°ã®èšçœ®çµµå€æŽ
pd.set_option("display.max_rows", 101)
url_iine_ruiji_log.head(100)
äžèšã®çµæã¯ãdataframeã§è¡šç€ºããŠãããã
å¥éå å·¥ããŠãçµæçºè¡šã«é²ãããšã«ããã
ãããããã¯ã¯ã¯ã¯
çµæçºè¡š
â»åãããŠããªãè¯èšäºãå«ãã§ããŸãã
泚èšïŒå
èšäºã®ãããæ°ã¯ã2018幎6ææ«æç¹ã®å€ã
ãããããããæ°åã倧ãã䌞ã³ãŠãããšãããã
æ¬æçš¿ã«ãã£ãŠçºæãããææãããããŸããïŒïŒ
çµæèå¯
å
ã
ããããé«ãèšäºããã¡ããæœåºãããŠãããã
è¯ãèšäºã«èŠããã®ã«ãããããããå°ãªããã®ãã
ããªãæœåºãããŠãããšæããã
ïŒè©³çްã¯ããå°ãæéããããŠèŠãªããšã»ã»ã»ïŒ
ãªãããæ®¿å å
¥ãèšäºãã¬ãã«ã¯ãå
šäœã®**0.4%**çšåºŠã§ããã
æœåºåŠçã§ã¯ãèªåèªèº«ïŒå
èšäºãããæ°ã¯åç
§ããŠããªãã®ã ãã
ïŒæ£ç¢ºã«ã¯ã¯ã©ã¹ã¿ã®å¹³åãããèšç®ã§ãèªèº«ã®ãããæ°ãå«ããŠãããã®ã®ã
ããã®åç
§ã®ä»æ¹ã¯ã倿°ã®äžã®å¹³åãšããŠäœ¿ã£ãŠããã«éããªãïŒ
äºæ³ä»¥äžã«ã殿å å
¥ãã¬ãã«ã®èšäºãå
¥ã£ãŠããå²åãé«ãã
äžè¿°ã®100èšäºã®å¹³åãããæ°ã¯ããªããš206ã
ãã³ãŒãç³»ããããæç« ç³»ãã®æ¹ãå€ãæœåºãããŠãããããªæ°ãããã
ïŒã©ãããåé¡ã ãïŒ
ã€ããããŠãããã¿ã°ãã«ã€ããŠã
æ¯èŒçãã€ããŒã§ãTOP60äœã«å
¥ã£ãŠããªããã®ãå€ãã
ãããªæ°ã¯ããã
Doc2Vecãã¯ã©ã¹ã¿ãªã³ã°ãå皮粟床ãã¥ãŒãã³ã°ã工倫ãã«ãã£ãŠã
èªèº«ã®ãããæ°ãã¿ã°ããèæ
®ã«å
¥ããªããŠãã
ãããããã®ç²ŸåºŠã§**ãè¯èšäºã®æœåºããå®çŸããããšãåºæ¥ã**ã
å®éã©ã®çšåºŠã®ç²ŸåºŠãªã®ãã
詳现ã¯ãã²çããã®æèŠã§èšäºãèªãã§ç¢ºèªããŠããã ãããã
ãŸãããã®çµæãå
šãç¥ããªãã£ãåãããŠããäžçã
å°ãã§ãåºããããšãããã°ã倧å€ããããæãã
çžå€ãããé£ããç¹ã¯ãä»åæœåºãããèšäºãã
æãããŠæ¬åœã«è¯èšäºãªã®ãããã®ç²ŸåºŠãã¯ããæ¹æ³ã ã
è¯èšäºãã©ããã¯ã䞻芳ãã«ãã£ãŠç°ãªãããã ã
ããããæ
å ±ãéå€ã§ããçŸåšã
æ©æ¢°ã«ããçšåºŠã®å€å¥ãããããã
æ©æ¢°ã«ãªã¹ã¹ã¡èšäºãæ¢ããŠããã£ããããšãã
ããªã³ã¡ã³ããã¯å€ãæ±ããããŠããã
ãŸããä»åã®ã¢ãã«ãã¯ã©ã¹ã¿ã䜿ããšã
èšäºãæžããç¬éããããã®èšäºãäœããããããã€ããããã
åé¡ïŒäºæž¬ãåºæ¥ã
ïŒâ»ãã®èšäºèªäœãå
¥ããŠäºæž¬ãããŠãé¢çœããã
ããããºããšæ²ããããæ¢ã«è¶
é·ããªããããŠããã®ã§ä»åã¯ãã¹ïŒ
ããšãã
衚ã®ããšãã
以äžã®ïŒç¹ã®æçš¿ã¯ããã®æçš¿ã®ããã®å©èµ°ã§ããã£ãã
ãããããããããå°ãªãè¯èšäºãã®çºæã¯ã
ãµã€ãŒã«èããŠãè¶
é£ããã
ããªãåããã«ãããªã£ãŠããŸã£ããããããªãã
100åãããèªã¿çŽããŠã¿ããšè¯ããããããªã
-
Qiita殿å å ¥ãèšäºã©ã³ãã³ã°ãäœã£ãç©èªïŒ2018/06/29æçš¿ïŒ
-
çŽè¿ïŒå¹Žã®Qiitaèšäºåæã§åãã£ãïŒã€ã®ã驿ãïŒ2018/07/03æçš¿ïŒ
ç¹°ãè¿ã匷調ããŠããããã
Qiitaã«ã¯ããããæ°ã ãã§æž¬ããªãè¯èšäºã沢山ç ã£ãŠããã
ãã¬ã³ãã§ãçŸåšè¡šã«ããã£ãŠããèšäºã ãã§ãªãã
ãæ®¿å å
¥ããã®ããã«éå»ã®ãã¬ã³ãã®ä¿åãã
ä»åã®æçš¿ã®ããã«ãé ãããè¯èšäºãçºæãããããã
äœããã®ä»æããæã人ã¯å€ãã®ã§ã¯ãªãã ãããïŒ
ããšããã®èšäºèªäœãåããããŠããŸããšçºæè
ãåãŸã£ãŠããŸãããã
ããã ãã¯é¿ããªããã°ãªããªããã€ãŸãã»ã»ã»
è£ã®ããšãã
Qiitaåæã«é¢ããäžé£ã®æçš¿ã¯ãå®ã¯ä»¥äžã®ïŒç¹ãšåãããïŒéšæ§æã®ç®çãããã
- ãèµ€ã®ä»äººãã®å¯ŸçŸ©èªã¯ãçœãæäººã ãããèªåçæãããç©èª
- å¹³æã®æ¬¡ã®å å·ããAIã ãã§æ±ºããããç©èª
èšèªããã¯ãã«åããæè¡ïŒWord2Vecã®ç³»çµ±ïŒãé¢çœããšæããã
ãããããã®å®è£
äŸã玹ä»äŸãšããŠã
ãçããŒãç·ãïŒã女ãïŒã女çããããã®ãŸãŸåããã ãã®ãããªæ
å ±ãå€ãã
ïŒããã¯ããã§éèŠã§ããã¥ãŒããªã¢ã«çã«ããããããæ
å ±ãªã®ã ãïŒ
çã®åãåŒãåºããŠããªãããã«æããã
åèªãæåãæç« ã§ããããããã£ãšåŒ·åãªå¿çšäŸãæç€ºãã
äžã®äžã®å¯èœæ§ãåºæ¿ãããããšããäžé£ã®ããŒããšããŠèšå®ããã
Word2Vecâãèµ€ã®ä»äººãã
Char2Vecâãå¹³æã®æ¬¡ã®å
å·ãã
ãããŠã
Doc2VecâãQiitaåæç³»ã®äžé£ã®èšäºãã
ç¡äºãäžå·¡ããããšãåºæ¥ãŠããŸãã¯ãããšããŠããã
倧å€ã ã£ãã»ã»ã»ãïŒæ¬¡ã¯äºå·¡ç®ïŒïŒïŒ
远èšïŒæ¬¡åã®ããŒãã¯ãäºå·¡ç®ã§ã¯ãªãããããšããã«ããŠã¿ãã以äžèšäºã
ããããšãã培åºåæïŒæåŒ·ãã£ã©ïŒæåïŒè§£èª¬ïŒïŒã€ã®ã驿ãïŒæé·ã®å¢æ®ãããšããžææŠ
ïŒæ¥æ¬äººãªã絶察ã«é©ããããšãã®æå€ãªããŒã¿åæçµæãæããã«ïŒïŒåŸåã®è¡šãå¿
èŠïŒ
å
šèšäºã©ãããæšä»ã®æçš¿ã®äžã§ãç¹ã«ç¡é§ã極ããå
容ã«ã
å€ãã®å¿æŽãããã ãã倧倿è¬ããŠããŸãïŒ
人é¡ã®é²åã¯ãéã³ãããã¯ããŸãã
ãããªãéã³ããåºæ¥ããªãã°ããšããã¢ã€ãã¢ã«è§Šçºããã人ãã§ãŠã
çæŽ»ã«ã圹ã«ç«ã€ãããªãçºæããçãŸããã®ã ã
ããããããããããïœ ãChar Fuitter (1847ïœ1912 ãªã©ã³ã)ãïœ
ãã®ç©èªã¯ãã£ã¯ã·ã§ã³ã§ãã
ç»å Žãã人ç©ã»å£äœã»åç§°çã¯æ¶ç©ºã§ããã
å®åšã®ãã®ãšã¯é¢ä¿ãããŸããã
Char Fuitter ïŒãã£ãŒã»ãã€ã¿ãŒïŒã¯æ¶ç©ºã®äººç©ã§ãã
ãŸãããã®ãããªããããªå
容ã®èšäºãããªã³ã¯ããŠããŸã£ã
ãªã³ã¯å
ã®çæ§ããè¿·æãããŠç³ãèš³ãããŸããã