1.はじめに
この記事(技術動向の把握に関する研究─審査官フリーワードを用いて─)を読んで、審査官フリーワードって結構使えるなと思い、これで類義語辞書を作ると面白いんじゃないかと思い作成しました。
過去に作ったものは出願の明細書の文章を使っていましたが、こちらはどんな違いが出るかも気になるので実験しました。
2. 流れ
2.1特許庁のデータを取得。
特許庁からもらったデータから取得します。
2.2 polarsでデータ加工をやろうとする。
#!pip install polars import polars as pl
df = pl.read_csv("upd_srch_forward_exam_free_word.tsv",sep="\t",encoding="utf-8",ignore_errors=True)
df
word2vecで埋め込み情報を作る際に、テーマコード、Fターム(観点)、フリーワードを抽出したかったので、処理をさせたところクラッシュ!
(df.with_columns(pl.col("forward_exmn_free_word_word").str.extract("([A-Z][A-Z][0-9][0-9])").alias("fterm"))
.with_columns(pl.col("forward_exmn_free_word_word").str.replace("([A-Z][A-Z][0-9][0-9])","").alias("word"))
.groupby(["rep_doc_num_pub_exam_pub_num","forward_exmn_free_word_theme"]).agg(pl.col(["forward_exmn_free_word_word","fterm","word"])))
#クラッシュ!
2.3 BigQueryへ
元にもどり、BigQueryに投入してからpolarsでやってたことを実施しました。
WITH tempt AS(
SELECT
rep_doc_num_pub_exam_pub_num as appnum
,forward_exmn_free_word_theme as theme
,NORMALIZE(REGEXP_REPLACE(forward_exmn_free_word_word,"([A-Z][A-Z][0-9][0-9])",""),NFKC) as word
,NORMALIZE(REGEXP_EXTRACT(forward_exmn_free_word_word,"([A-Z][A-Z][0-9][0-9])"),NFKC) as fterm
FROM `[Project-ID].[dataset].srch_forward_exam_free_word`)
SELECT *
FROM tempt
出力結果↓
これをさらにappnumでgroupbyして連結。
SELECT
appnum
,CONCAT(
STRING_AGG(DISTINCT theme," ")
,' '
,STRING_AGG(DISTINCT word ," ")
,' '
,STRING_AGG(DISTINCT CONCAT(theme,fterm)," ")
)
FROM tempt
GROUP BY appnum
最終的にこのような形に。
「!!!」とか特殊なコマンドなど入っていたので、テキストをきれいにした方がいいかもですが、とりえあえずpolarsに戻します。
⇓戻したところ
2.4 word2vecモデル作成
#!pip install gensim
ary = df.select(pl.col("f0_").drop_nulls().str.split(" ")).to_pandas()
from gensim.models import Phrases
sentences = ary["f0_"].tolist()
bigram_transformer = Phrases(sentences)
from gensim.models import word2vec
model2 = word2vec.Word2Vec(bigram_transformer[sentences], min_count=2)
出力1
results = model2.most_similar(positive=["深層学習"], topn=20)
for result in results:
print(result[0], result[1])
5L096JA22 0.9799203872680664
5L096FA35 0.9791525602340698
5L096_形状 0.9774672985076904
5L096EA18 0.9773236513137817
5L096FA67 0.9770499467849731
5L096FA02 0.9768902659416199
5L096BA08_5L096FA70 0.976691484451294
5L096EA26 0.9761407971382141
投影変換 0.9759130477905273
5L096HA11 0.9758796691894531
5L096DA02 0.9743384122848511
5L096CA22 0.9740961790084839
5L096HA13 0.9723299145698547
5L096BA08_5L096BA18 0.9718570709228516
5B057AA20_5L096BA08 0.97127366065979
5L096GA06 0.9707862138748169
5L096_顔 0.9704722166061401
5L096_畳み込みニユ−ラルネツトワ−ク 0.9701388478279114
5L096KA04 0.9700435996055603
5L096HA07 0.969708263874054
"""
出力2
results = model2.most_similar(positive=["尿素"], topn=20)
for result in results:
print(result[0], result[1])
"""
アルデヒド 0.9519166946411133
炭酸アンモニウム 0.9480167627334595
ホルムアルデヒド 0.9387741088867188
塩化ナトリウム 0.9312995076179504
酪酸 0.9302324652671814
メルカプタン 0.929763674736023
アルコ−ル類 0.9291161298751831
硫酸アンモニウム 0.9281033873558044
モリブデン酸アンモニウム 0.9279258251190186
塩化マグネシウム 0.9272302985191345
銅イオン 0.925960898399353
ウレア 0.92583829164505
ジニトロ安息香酸 0.9249658584594727
酢酸アンモニウム 0.9244481921195984
アルキルジメチルベンジルアンモニ 0.9242886304855347
ケトン類 0.9242538213729858
プロピオン酸 0.9237731099128723
硝酸銀 0.9237323999404907
水酸化カリウム_水酸化ナトリウム 0.9236425161361694
塩化カリウム 0.9235260486602783
"""
出力3
results = model2.most_similar(positive=["5L096","自然言語処理"], topn=20)
for result in results:
print(result[0], result[1])
"""
確信度 0.9727489948272705
5L096HA05 0.9633218050003052
再学習 0.9540145397186279
5L096BA08_5L096BA18 0.9536796808242798
5L096BA08_5L096FA70 0.9535583853721619
5L096_5B043 0.9530977606773376
GANs 0.9528773427009583
4C038_5L096 0.9527603983879089
特徴ベクトル 0.9523374438285828
覚醒度判定 0.9503534436225891
5L096KA03 0.9501161575317383
HOG 0.9500117301940918
遺伝アルゴリズム 0.9498676657676697
類似度 0.949141263961792
5L096_5B050 0.9489232301712036
5L096KA04 0.9488170146942139
5B043_5L096 0.9475307464599609
5L096BA18_5L096BA08 0.947296142578125
個人照合 0.9471085071563721
特徴量の差 0.9468021988868713
"""
Comments