중요한 문자 식별 - itemgetter 및 TfidfVectorizer -

계기



메르카리 대회 1위 코드 에 나온 itemgetter와 TfidfVectorizer가 잘 모르기 때문에.

요약



itemgetter→이터러블(리스트, 캐릭터 라인 등 for문의 in에 기입할 수 있는 오브젝트)로부터 임의의 요소를 추출할 수 있다.

TfidfVectorizer → 문장의 중요한 문자를 계산할 때 사용합니다. 점수가 높을수록 문서 내의 출현 빈도가 높고, 다른 문서에는 출현하기 어려운 문자임을 나타낸다.

itemgetter



name 요소를 취득하는 호출 가능한 오브젝트가 1행째로 돌려주어지고 있다.
두 번째 줄은 name 요소만 추출합니다.

qiita.rb
from operator import itemgetter

item=itemgetter("name")
item({'name':['taro','yamada'], 'age':[5,6]})



TfidfVectorizer



TF-IDF 을 계산할 때 사용한다.
TF-IDF는 문서에서 중요한 문자열은 무엇인가를 특정하는데 사용한다.
대회 내에서는, 출전되고 있는 상품의 브랜드명을 수치화하기 위해서 사용되고 있다.
이하의 예에서는 five, six, taro, yamada의 출현 빈도가 높고, 다른 문서에는 등장하지 않기 때문에, 스코어가 높아지고 있다.

qiita.rb
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer as Tfidf

sample_string= np.array(['taro is five years old','yamada is six years old'])
tfidf=Tfidf(max_features=100000, token_pattern='\w+')
x=tfidf.fit_transform(sample_string)

pd.DataFrame(y.toarray(), columns=tfidf.get_feature_names())



itemgetter, TfidfVectorizer, Pipeline의 병용



itemgetter("name")의 인스턴스와 Tfidf의 인스턴스를 파이프라인화하고 있다.
.transform에서 name 요소를 추출한 후 name 요소 내에서 중요도를 계산합니다.
파이프라인화는 이쪽

qiita.rb
from sklearn.pipeline import make_pipeline, make_union, Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer as Tfidf
from operator import itemgetter
from sklearn.preprocessing import FunctionTransformer
import pandas as pd

def on_field(f: str, *vec) -> Pipeline:
    return make_pipeline(FunctionTransformer(itemgetter(f), validate=False), *vec)

df=pd.DataFrame({'string':['taro is five years old','yamada is six years old'], 'age':[5,6]})
Pipeline=on_field('string', Tfidf(max_features=100000, token_pattern='\w+'))
Pipeline.fit(df)
data=Pipeline.transform(df)

pd.DataFrame(data.toarray(),columns=tfidf.get_feature_names())

좋은 웹페이지 즐겨찾기