単語の特徴をベクトルで表現する技術であるWord2Vecとそれを応用し、絵文字をベクトルで表現するEmoji2Vecを使って、最近よくSNSで使われている「ぴえん🥺」という言葉について分析を行いました。
ぴえんとは
仕事終わらない…ぴえん🥺
このように若い世代を中心に使われている「ぴえん」。2020年6月18日にInstagramメディア「Petrel」が発表した2020年上半期インスタ流行語大賞の流行語部門で1位となりました。さらに、2020年11月30日には2020年新語大賞にも選ばれています。また、「ぴえん」を題材としたゲームもリリースされています。
そんな「ぴえん」ですが、大人たちの間では意外と意味を知らない人も多いようで、「ぴえん、ってどういう意味?」と聞かれることがしばしばあります。
ネットで「ぴえん 意味」と検索してみると、以下のような解説が出てきます。
ピクシブ百科事典
(https://dic.pixiv.net/a/%E3%81%B4%E3%81%88%E3%82%93)より引用
Wikipedia
(https://ja.wikipedia.org/wiki/%E3%81%B4%E3%81%88%E3%82%93)より引用
解説通りではあるものの、やはりニュアンスは伝え辛い…ということで今回は、Word2Vecや絵文字版であるEmoji2Vecを使って「ぴえん」の意味を分析してみようと思います。
Word2Vecを使って「ぴえん」を分析する
Word2Vecとは2013年にGoogleの研究所から発表された自然言語処理の基礎技術の1つで同じ文脈で用いられる単語は似た意味を持つという仮定に基づき、単語の特徴をベクトルで表現する技術です。
まずは、このWord2Vecを使って、Twitter上で「ぴえん」を含むツイートを集め、類似語の抽出を行います。今回、分析用にTwitterから「ぴえん」を含むツイート50,000件を取得しました。
今回必要なライブラリは以下なので、インストールがされていない場合はpipを使って準備をしてください。
- MeCab
- gensim
- itertools
まずはツイートデータが保存されているファイルを開き、MeCabを使って形態素解析を行ったのち、Word2Vecのモデル(.model)を生成します。
import MeCab from gensim.models import word2vec #トリガーの設定 tagger = MeCab.Tagger('-O wakati') #形態素解析した単語を格納するリスト keywords = [] #ファイルを開く with open('ツイートデータのファイル名','r') as f: line = f.readline() #形態素解析 while line: result = tagger.parse(line) keywords.append(result[1:]) line = f.readline() #モデルを生成 sentences = word2vec.LineSentence(keywords) #パラメータの設定 model = word2vec.Word2Vec(sentences, sg=1, size=100, min_count=1, window=10, hs=1, negative=0) #モデルを出力 model.save('出力するモデルのファイル名')
gensimを使って、Word2Vecのモデルが出力できたら、以下のようなプログラムを実行します。
from gensim.models import word2vec import sys model = word2vec.Word2Vec.load('モデルを保存したファイル名') results = model.most_similar(positive='ぴえん', topn=15) for result in results: print(result[0], '\t', result[1])
結果は以下のように出力されました。
rank | word | score |
---|---|---|
1 | 🥺 | 0.676816225 |
2 | ぴえんぴえん | 0.655061603e |
3 | 身動き | 0.629974842 |
4 | ぱおんですね | 0.625854313 |
5 | 禁断 | 0.623079777 |
6 | しくしく | 0.618354917 |
7 | 🥺💦💦 | 0.61374414 |
8 | 血涙 | 0.611876905 |
9 | 🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺🥺 | 0.609706283 |
10 | 嗚呼 | 0.600714564 |
11 | ぱおんだが | 0.593052506 |
12 | ぱおんじゃん | 0.586763501 |
13 | 😨 | 0.586448073 |
14 | 🥺🥺🥺💦💦 | 0.58619827 |
15 | ぴてん | 0.585098386 |
結果をみると、まず「ぴえん」を表す絵文字「🥺」が1位、7位、9位、14位にきています。2位のように「ぴえんぴえん」と複数回繰り返して使うことも多いです。そして、冒頭の辞書の解説にあったように、「しくしく」や「血涙」など泣いている様子を表す言葉も見られます。
今回のようなネットスラングは形態素解析が難しいので、うまく分割ができていなかったのですが、4位、11位、12位には「ぱおん」がランクインしています。「ぱおん」は「ぴえん」の上位互換のより強い意味合いの言葉です。「ぴえんを超えてぱおん」などという使い方をしたりします。ちなみに、「ぴてん」は「ぴえん」の変形で、ほぼ「ぴえん」と同じような使い方がされています。
この分析では確かに類似語の抽出はできましたが、「ぴえん」とほぼ同じような使い方をする表現が多かったため、ニュアンスがいまいち掴めなさそうです。そこで、次は形態素解析の段階で品詞を名詞・動詞・形容詞に限定して、類似語を抽出した結果を見てみます。
rank | word | score |
---|---|---|
1 | ぴえんぴえん | 0.72460073 |
2 | ガチ | 0.68390793 |
3 | マジで | 0.68056452 |
4 | むり | 0.66571963 |
5 | ぽよ | 0.65068579 |
6 | 過呼吸 | 0.6461606 |
7 | 沸く | 0.64409369 |
8 | 鬱 | 0.64310986 |
9 | しぬ | 0.64229906 |
10 | 最近 | 0.64176333 |
11 | うな | 0.64127886 |
12 | そっ | 0.63725108 |
13 | がち | 0.63477558 |
14 | 愉快 | 0.6309495 |
15 | ぴえんに | 0.62927133 |
先ほどの結果よりも分かりやすい類似語抽出されました。「むり」「過呼吸」「沸く」「鬱」「しぬ」「愉快」などはかなり強めの感情を表現している語が抽出されています。その点を考えると、「ぴえん」は単純に泣いている様子を表しているだけでなく、感情の強調のような意味合いもあるのではないかと思いました。
Emoji2Vecを使って「ぴえん」の絵文字を分析する
続いて、Word2Vecを使って絵文字をベクトル化したEmoji2Vecを使って「🥺」を分析します。
英語ですが、Emoji2Vecについてより詳しく知りたい場合は以下の論文を参照してください。
Eisner, Ben, et al. “emoji2vec: Learning emoji representations from their description.” arXiv preprint arXiv:1609.08359 (2016).
https://www.aclweb.org/anthology/W16-6208/
今回はGitHub上でsugiyamathさんにより公開されている下記学習済みのモデルを使用します。
“sugiyamath/word2vec_japanese_twitter: A word2vec model that was built from japanese tweets”.GitHub.
https://github.com/sugiyamath/word2vec_japanese_twitter/
<編集部注>
・このWord2VecはBPE(Byte Pair Encoding)に基づいて頻出語を抽出しているのみのため、語彙数は少ないです。
・このWord2Vecの本来の目的は、Keras等のEmbedding層の初期重みとして利用することです。
まずは、以下のコマンドでモデルをダウンロードし、展開します。
$ apt install p7zip-full $ wget https://github.com/sugiyamath/word2vec_japanese_twitter/blob/master/model.7z?raw=true $ 7z x model.7z*
前半のWord2Vecと同様にgensimを使ってモデルを読み込みます。Emoji2Vecでは絵文字同士の組み合わせを見ていきます。
まずは、Emoji2Vecを確かめるために、分かりやすい喜(😊)・怒(😡)・哀(😭)・楽(😆)の絵文字の組み合わせの結果を確認します。
from gensim.models import Word2Vec import itertools as it model = Word2Vec.load('model/w2v_gensim/word2vec_tweet.model') emoji = ['😊', '😠', '😭', '😆'] for x in it.combinations(emoji, 2): reslut = model.wv.most_similar(list(x))[0] print(x[0], ' + ',x[1], '=',reslut[0],reslut[1])
emoji | score |
---|---|
😊 + 😠 = 🤗 | 0.77638471 |
😊 + 😭 = 😭😭 | 0.86220121 |
😊 + 😆 = 😄 | 0.92856109 |
😠 + 😭 = 😫 | 0.82260144 |
😠 + 😆 = 😤 | 0.79955405 |
😭 + 😆 = 😂 | 0.89598531 |
組み合わせ的には解釈が難しいものもありますが、例えば「😠 + 😭 = 😫」や「😭 + 😆 = 😂」などは感覚的にも納得がいくのではないでしょうか?
続いて、この喜怒哀楽の絵文字に「🥺」を追加して組み合わせの結果を見てみようと思います。結果は以下の通りでした。
emoji | score |
---|---|
🥺 + 😊 = 😊💕 | 0.70443583 |
🥺 + 😠 = 😡 | 0.66364324 |
🥺 + 😭 = 😭😭 | 0.70068145 |
🥺 + 😆 = 😆💕 | 0.68366325 |
いずれも各絵文字の感情を強調するような結果が出ました!Word2Vecでの結果とも近しい気がします。
ちなみに、「ぴえん」の上位互換である「ぱおん」は「🐘」で表現されるので、これも追加してみた結果を見てみようと思います。
emoji | score |
---|---|
🐘 + 🥺 = 🐅🐆🐅🦏 | 0.46269271 |
🐘 + 😊 = 🤗 | 0.76790798 |
🐘 + 😠 = 😡 | 0.69543242 |
🐘 + 😭 = 😭😭 | 0.73047876 |
🐘 + 😆 = 🙌 | 0.75409031 |
「🐘 + 🥺 = 🐅🐆🐅🦏」という結果をみると、「ぱおん(🐘)」の次は「🐅🐆🐅🦏」かも?!なんと読めばいいかは分かりませんが…ぱおんが極まった感じは伝わってきました。これ以外の絵文字については「🥺」と同様に感情を増幅させた表現の絵文字が出力結果となっていました。
想定以上に面白い結果が得られたのではないかなと思います。
Emoji2Vecで言葉の分析結果が豊かになる
今回、Word2VecとEmoji2Vecを使って流行語の「ぴえん」について分析を行いました。SNSでは日々新しい言葉が生まれ、使われています。明確な意味が定義されていない言葉に対して、このような分析を行いその意味を探っていくのはとても面白いと思います。
特に最近は文字だけではなく、絵文字による表現がマストになってきたといっても過言ではありません。だからこそ、Emoji2Vecも併せて使うことでより分析から得られる結果が豊かになるのではないかと思いました。
ぜひ、気になる絵文字や言葉を見つけたら、Word2VecやEmoji2Vecを使って分析してみてください!
工学部女子大生とライターをしています。卒業研究で彼氏の浮気を防ぐためにSNS上で彼氏と彼氏のフォロワーの親密度推定に挑戦中。大学院では計量言語学を専攻予定。