u++の備忘録

自然言語処理

【書籍メモ】『Kaggleに挑む深層学習プログラミングの極意』(講談社)

※ 「Kaggle Advent Calendar 2022」の 25 日目の記事です ご縁があって、講談社から共著で『Kaggleに挑む深層学習プログラミングの極意』を出版します。 画像・自然言語処理の機械学習コンテストを題材として、深層学習ライブラリ「PyTorch」での実装を交え…

「東京大学グローバル・インターンシップ・プログラム(UGIP)」の勉強会に登壇しました

※ 「Kaggle Advent Calendar 2022」の「Calendar2」の 16 日目の記事です 12 月 16 日に開催された「東京大学グローバル・インターンシップ・プログラム(UGIP)」の勉強会に登壇し、機械学習コンテストや実務での事例を題材に、データ分析プロジェクトの進…

YANS2022 ハッカソン参加録:ランク学習による商品レビュー評価

※ 「Kaggle Advent Calendar 2022」の 12 日目の記事です。 今年 8 月に「NLP 若手の会 (YANS) 第 17 回シンポジウム」(YANS2022)内で開催されたハッカソンに参加しました。 特定の評価指標での性能を競うハッカソンで、今年はアマゾンウェブサービスジャ…

SemEval-2022 Task 8 参加録:多言語ニュースの話題一致判定

「Kaggle Advent Calendar 2022」の 7 日目の記事を担当します。 本記事では、今年参加した国際ワークショップでの機械学習コンペ「SemEval 2022 Task 8: Multilingual News Article Similarity」の概要とチームでの取り組みを紹介します。 SemEval とは 「S…

「第24回音声言語シンポジウム・第9回自然言語処理シンポジウム」で発表しました

「第24回音声言語シンポジウム・第9回自然言語処理シンポジウム」にて「国際会議参加報告 AACL-IJCNLP 2022」の題目で発表しました。 採択数などの統計情報や開催形式の報告をした後、個人的な興味関心をもとに気になった論文を紹介しました。 この国際会議…

自然言語処理の国際会議「AACL-IJCNLP 2022」に論文採択・参加報告

11 月 20〜23 日開催の自然言語処理の主要な国際会議「AACL-IJCNLP 2022」に参加しました。投稿した論文が本会議にロングペーパーとして採択され、22 日にポスター発表を実施しました。本記事の最後に、論文・コード・発表資料のリンクを掲載しています。 本…

国際会議「ACL2022」の "News" を含む論文の一言メモ

自然言語処理の最重要国際会議の一つ「ACL2022」の Proceedings にて "News" をタイトルに含む論文の一言メモです。要約・フェイクニュース検出・推薦の話題が多かった印象です。 Long Papers https://aclanthology.org/2022.acl-long.97/ 情報源・情報源が…

Kaggle「CommonLit Readability Prize」コンペ25位の振り返りと上位解法まとめ

8月2日に終了したKaggle「CommonLit Readability Prize」コンペにチームで参加し、25位でした。 3682チーム参加で、17位までが金メダル圏内で、もう一歩という結果でした。 コンペ概要 チームでの取り組み 上位解法 全体共通の傾向 1位 2位 3位 4位 5位 6位 …

【書籍メモ】『BERTによる自然言語処理入門 Transformersを使った実践プログラミング』(オーム社)

『BERTによる自然言語処理入門 Transformersを使った実践プログラミング』(オーム社)をサラッと読みました。近年の自然言語処理領域の飛躍的発展のきっかけとなった BERT について、理論と実践をバランス良く取り上げた良書だと感じました。 『BERTによる…

「GPT-3」周辺で調べたことをまとめる(2021年2月)

コンピュータサイエンス技術の一つに、自然言語処理(NLP)と呼ばれている領域があります。NLPは、コンピュータに人間の用いる言語(自然言語)を処理させる取り組み全般を指します。 ここ数年のNLPの傾向として、大規模テキストでの事前学習済みモデルの活…

自分のTwitter投稿内のURLを分析してみた

これは何? 次の記事に着想を得て、自分のデータでやってみました。具体的には、2015年6月から現在までの自分のTwitter投稿から、全部のURLを抽出し、ドメイン単位で集計しました。 www.buzzfeed.com データの取得 twilog*1に自分の投稿データが保存されてい…

言語処理100本ノック 2020「59. ハイパーパラメータの探索」

問題文 nlp100.github.io 問題の概要 学習アルゴリズムとして「RandomForestClassifier()」も利用し「max_depth」の値を調整します。 import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestC…

言語処理100本ノック 2020「58. 正則化パラメータの変更」

問題文 nlp100.github.io 問題の概要 学習時の「C」の値を調整することで、学習・予測結果が変わります。 import matplotlib.pyplot as plt import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy…

言語処理100本ノック 2020「57. 特徴量の重みの確認」

問題文 nlp100.github.io 問題の概要 ロジスティック回帰を用いた場合は「.coef_」で特徴量の重みを確認できます。今回は値の絶対値に興味があるので、事前にソートした上で上位・下位10個の特徴量を出力します。 import joblib clf = joblib.load('ch06/mod…

言語処理100本ノック 2020「56. 適合率,再現率,F1スコアの計測」

問題文 nlp100.github.io 問題の概要 適合率,再現率,F1スコアはそれぞれ「precision_score()」「recall_score()」「f1_score()」で計算できます。「average」には「'micro'」「'macro'」などが指定可能*1です。 import pandas as pd import joblib from sk…

言語処理100本ノック 2020「55. 混同行列の作成」

問題文 nlp100.github.io 問題の概要 混同行列は「confusion_matrix()」で作成できます。 import pandas as pd import joblib from sklearn.metrics import confusion_matrix X_train = pd.read_table('ch06/train.feature.txt', header=None) X_test = pd.r…

言語処理100本ノック 2020「54. 正解率の計測」

問題文 nlp100.github.io 問題の概要 正答率は「accuracy_score()」で計算できます。 import pandas as pd import joblib from sklearn.metrics import accuracy_score X_train = pd.read_table('ch06/train.feature.txt', header=None) X_test = pd.read_ta…

言語処理100本ノック 2020「53. 予測」

問題文 nlp100.github.io 問題の概要 学習を終えたモデルは、予測値が未知の特徴量(X_test)を与えて予測させることができます。 import pandas as pd from sklearn.linear_model import LogisticRegression X_train = pd.read_table('ch06/train.feature.t…

言語処理100本ノック 2020「52. 学習」

問題文 nlp100.github.io 問題の概要 用意した特徴量と予測の対象のペアから、機械学習アルゴリズムを用いて予測器を学習させましょう。 import pandas as pd import joblib from sklearn.linear_model import LogisticRegression X_train = pd.read_table('…

言語処理100本ノック 2020「51. 特徴量抽出」

問題文 nlp100.github.io 問題の概要 カテゴリ分類に有用そうな特徴量を抽出します。ここでは、問題文の指示通りの最低限の特徴量を作ります。sklearnに用意されている「CountVectorizer()」が利用可能です。 記事の見出しを単語列に変換したものが最低限の…

言語処理100本ノック 2020「50. データの入手・整形」

問題文 nlp100.github.io 問題の概要 本章では、ニュース記事の見出しからカテゴリを分類する機械学習モデルを構築します。最初に指示に従ってデータセットを整形します。次の4段階で処理しました。 ファイルのデータ形式の確認 情報源(publisher)が”Reute…

ProbSpace「YouTube動画視聴回数予測」コンペ参加録

ProbSpaceで開催されていた「YouTube動画視聴回数予測」コンペに参加しました。Lain.さんとチームを組み、public 4位・private 6位でした。 prob.space コンペ概要 YouTube APIで取得できるメタデータを入力として、動画の視聴回数を予測するタスクでした。…

Stay Homeで『相棒』全部観た(おまけ:nagisa & nlplotで可視化)

今年4月にKDDIとテレビ朝日が設立したTELASA株式会社が運営する動画配信サービス「TELASA」にて、2000年のpre seasonから2019年の最新作まで『相棒』全シーズンの動画が配信されています。 www.videopass.jp 『相棒』はたびたび夕方に再放送され、「AbemaTV…

第85回R勉強会@東京 #TokyoR にて "R言語で「言語処理100本ノック 2020」" の題目で発表しました

第85回R勉強会@東京 #TokyoR にて、LT発表しました。2019年1月開催の第75回以来*1、久々の参加でした。 tokyor.connpass.com 発表の題目は "R言語で「言語処理100本ノック 2020」" で、4月に取り組んでいた「言語処理100本ノック 2020」の紹介*2&R言語での…

「BERT応用勉強会」参加録 #xpaperchallenge

「BERT応用勉強会」にオンライン参加しました。簡単な発表概要と個人的な所感をメモしておきます。発表動画のアーカイブは、YouTubeで後日公開されるそうですました。slidoとYouTubeコメントでの質疑応答はSpreadsheetにまとめてみました。 nlpaper-challeng…

企業名認識のデータセット「JCLdic」で学習したEncoder-Decoderモデル

TISが公開している企業名認識のためのデータセット「JCLdic」*1を用いて、Encoder-Decoderモデルを学習させてみました。 結果と考察 学習・検証に利用していないデータに対して適応した結果を下図に示します。統計的な出現頻度に基づくので当然な気がします…

言語処理100本ノック 2020「49. 名詞間の係り受けパスの抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。第5章は2015年版と同様なので、先駆者のコード*1を流用しつつ実装しました。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] s…

言語処理100本ノック 2020「48. 名詞から根へのパスの抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「47. 機能動詞構文のマイニング」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…

言語処理100本ノック 2020「46. 動詞の格フレーム情報の抽出」

問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…