沙灘+美女才是夏天的正確開啟方式

語言: CN / TW / HK

我正在參加「初夏創意投稿大賽」詳情請看:初夏創意投稿大賽

前言

炎炎夏日馬上就要到了,可是疫情肆虐的兩年裡,我已經兩年沒有出去旅遊了,淡忘了許多關於“沙灘”和“美女”的美景,作為一個技術人員,我想通過程式找出那些逝去的記憶,“沙灘”和“美女”以及其他相關美好的回憶將再次激盪在我腦中!

思路

學習過 NLP 的童鞋肯定知道,想找出某個詞最相關的詞,簡單粗暴的方法就是使用 word2vec ,語義的可解釋性也比較好,所以就定下用它!

先使用中文訓練好一個 word2vec 模型,然後再通過關鍵詞語的詞向量互相組合,不斷擴展出和最初關鍵詞相近的詞語,這樣我們就能組成一個大的詞語網路,這個詞語網路就能將美好的場景重新描繪在我們腦海中。是不是很簡單?

準備

  • 需要懂得 word2vec 的基本原理
  • 需要掌握基礎的 python 和簡單演算法基礎
  • 需要安裝 gensim 庫,學會使用基本的 word2vec 的相關操作
  • 聽懂掌聲👏👏👏

實現

import collections
import itertools
from gensim.models import KeyedVectors

model = KeyedVectors.load_word2vec_format('./word2vec_779845.bin', binary=True)
words = ['沙灘', '美女', '比基尼']
N = 1
visited = set(words)
result = collections.defaultdict(list)
for L in range(2, 4):
    for word in itertools.combinations(words, L):
        if word not in visited:
            visited.add(word)
            vectors = model.most_similar(list(word), topn=5)
            for i, item in enumerate(vectors):
                if item[0] not in visited:
                    words.append(item[0])
                    visited.add(item[0])
                    result[word].append(item[0])
print(words)
print(result)

結果分析

經過一把程式梭哈我們可以得出的詞語如下所示,看了這些詞語,我已經有了心潮澎湃了,兄弟們有沒有心動呢?word2vec 真的是我的良師益友,它已經幫我找出了“女郎”、“比基尼”、“泳裝”,也幫我找出了“派對”、“草地”、“音樂會”,我放佛又回到了那個激情四射的夜晚沙灘派對,俊男靚女在參加音樂會,大家都在唱歌、跳舞、玩耍,盡情享受其中,活活美死!!

['沙灘', '美女', '比基尼', '海灘', '搖滾', '女郎', '閃耀', '泳裝', '紅毯', '群星', '閃亮', '性感', '主角', '女王', '鳥巢', '派對', '當紅', '偶像', '英倫', '璀璨', '帥氣', '裝扮', '女主角', '高手', '身著', '盛裝', '熱辣', '古裝', '一襲', '音樂會', '舞', '馳騁', '風情', '風帆', '城堡', '巡遊', '熠熠', '草地', '景色', '復古', '裙裝', '迷人', '化身', '壓軸', '火辣', '帥哥', '男星', '耀眼', '足球寶貝', '女星', '大腕', '浪漫', '劉亦菲', '男主角', '情侶', '巨星', '驚豔', '傾情', '華麗', '禮服', '嫵媚', '音樂節', '首映禮', '妖嬈', '唯美', '硬漢', '靚麗']

另外我們可以使用多個詞語描繪的場景來找出相關的詞語描述,部分結果如下所示。我們可以看到“沙灘”和“美女”相關的詞有“海灘”、“搖滾”、“女郎”、“閃耀”,此時我已經沉浸其中在沙灘上的搖滾現場群星閃耀,美女們在盡情 ROCK ,不要叫醒我,讓我多睡一會 ...

{('沙灘', '美女'): ['海灘', '搖滾', '女郎', '閃耀'], ('沙灘', '比基尼'): ['泳裝', '紅毯', '群星', '閃亮'], ('美女', '比基尼'): ['性感', '主角'], ('沙灘', '美女', '比基尼'): ['女王'], ('沙灘', '美女', '海灘'): ['鳥巢', '派對'], ('沙灘', '美女', '搖滾'): ['當紅', '偶像'], ('沙灘', '美女', '閃耀'): ['英倫', '璀璨'], ('沙灘', '美女', '性感'): ['帥氣', '裝扮'], ('沙灘', '美女', '主角'): ['女主角', '高手'], ('沙灘', '比基尼', '海灘'): ['身著', '盛裝'], ('沙灘', '比基尼', '搖滾'): ['熱辣', '古裝'], ('沙灘', '比基尼', '泳裝'): ['一襲'], ('沙灘', '比基尼', '群星'): ['音樂會'], ('沙灘', '海灘', '搖滾'): ['舞', '馳騁', '風情'], ('沙灘', '海灘', '女郎'): ['風帆'], ('沙灘', '海灘', '泳裝'): ['城堡', '巡遊'], ('沙灘', '海灘', '紅毯'): ['熠熠', '草地'], ('沙灘', '海灘', '性感'): ['景色'], ('沙灘', '搖滾', '性感'): ['復古'], ('沙灘', '女郎', '性感'): ['裙裝'], ('沙灘', '閃耀', '性感'): ['迷人'], ('沙灘', '閃耀', '主角'): ['化身'], ('沙灘', '紅毯', '群星'): ['壓軸'], ('美女', '比基尼', '性感'): ['火辣'], ('美女', '比基尼', '主角'): ['帥哥'], ('美女', '海灘', '搖滾'): ['男星'], ('美女', '海灘', '閃耀'): ['耀眼'], ('美女', '海灘', '泳裝'): ['足球寶貝'], ('美女', '海灘', '主角'): ['女星'], ('美女', '搖滾', '群星'): ['大腕'], ('美女', '搖滾', '性感'): ['浪漫'], ('美女', '搖滾', '主角'): ['劉亦菲', '男主角'], ('美女', '女郎', '主角'): ['情侶'], ('美女', '紅毯', '主角'): ['巨星'], ('美女', '閃亮', '性感'): ['驚豔'], ('比基尼', '搖滾', '群星'): ['傾情'], ('比基尼', '搖滾', '性感'): ['華麗'], ('比基尼', '泳裝', '性感'): ['禮服'], ('海灘', '搖滾', '性感'): ['嫵媚'], ('海灘', '紅毯', '群星'): ['音樂節', '首映禮'], ('搖滾', '女郎', '性感'): ['妖嬈'], ('搖滾', '閃耀', '閃亮'): ['唯美'], ('閃耀', '泳裝', '群星'): ['硬漢'], ('閃耀', '紅毯', '性感'): ['靚麗']}

尾記

本文情節純屬虛構,請勿亂想,主要是使用 word2vec 來實現一些好玩的東西,然後去掘金薅羊毛😁 😁 😁 。