全民K歌內容挖掘與召回

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"推薦系統一般分爲兩部分,召回階段和排序階段。召回階段是從全量數據中挑選出用戶可能感興趣的一部分數據,供後面的排序階段使用。全民K歌作爲一個擁有大量用戶上傳作品的平臺,如何挖掘用戶上傳的內容作爲推薦的候選集,也需要精心設計。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今天的介紹會圍繞下面四點展開:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內容挖掘"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"召回模型"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"召回模型實踐"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"總結和展望"}]}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"內容挖掘"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先和大家分享下全民K歌進行內容挖掘在業務上的必要性。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 內容挖掘--重要性"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d0\/d0509ae67f76efd618601ded05695cf7.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"跟普通的召回相比,全民K歌作爲一個UGC(User Generated Content,也就是用戶生成內容,即用戶原創內容),存在着兩種用戶:內容創作者和內容消費者。兩者對於平臺的訴求是不一樣的:內容消費者和其他平臺的用戶一樣,希望看到好的內容,獲得好的用戶體驗。而內容創作者更看重自己發佈的作品被更多的人去看到,去喜歡。所以如果單純從個性化分發的角度去看待問題,推薦的目標是爲了滿足內容消費者短期的需求,在短期內可能對於消費規模上會有一個增益。但是長期來看,這種方式會導致推薦流量分配越來越集中到少數作者。大量作者因爲得不到推薦流量,缺少創作激勵,會導致平臺創作者的流失。這樣對於平臺的生態來說是不理的。所以除了個性化分發的視角以外,還有一個從內容生態視角進行考慮的,從內容生態視角觸發的一個機制。這個機制就是內容挖掘機制。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 內容挖掘—目標"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3c\/3c604c01e295d2e47a8e5f8a390153c1.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內容挖掘的目標是持續發現優質內容,建立優質流量通路。爲了實現這個目標,內容挖掘主要分爲兩個模塊"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內容准入機制:從內容創造者上傳的內容中篩選出優質作品,進入到推薦系統鏈路"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分發通路:內容創作者上傳內容中篩選出優質作品之後,需要一個穩定的分發通路,保證這些優質資源能夠讓用戶看到。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這兩個模塊也是經歷了一系列的迭代和優化過程,下面將詳細介紹迭代過程。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 內容挖掘—迭代"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/92\/92faee09868c75313325b42aca08474f.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在內容准入方面,一開始用的是人工存量挖掘。靠人工對上傳的資源進行打分。這樣做可以獲取到高質量的資源,但是人工操作費時費力,效率很差,時效性也無法獲得保證。後面爲了提高效率嘗試用一些人工標註的特徵進行模型預估來識別優質內容,但是這些模型都存在一些問題。現在用的方案是基於視頻音頻本身的特徵來做優質內容的識別,然後用人工的一些輔助審覈來幫助實現的內容准入。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在內容分發方面,一開始完全是基於推薦系統的自然分發,然後在此基礎上,爲了更好的激勵內容創作者,增加了冷啓動內容保量機制。現在採用的是多級分發,針對不同的反饋效果去給一個作品做多流量的分發機制。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. 內容挖掘—方案"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/9d\/9df39c7b91c234ab5f1641fe6ec2e559.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從整體上看,內容挖掘一共有三部分組成:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"① 內容准入:內容准入部分是由TME創新團隊提供的深度神經網絡模型,將一些普通內容和優質內容進行人工標註之後訓練模型。對於新發的音頻和視頻資源,模型會根據他的唱功、視頻質量等一系列特徵來判斷內容好壞。對於音頻資源通過模型打分之後直接進入到推薦候選池中,對於音頻資源還需要通過人工審覈才能入庫。通過這樣的流程就可以很高效的從每日發佈的500w資源中挖掘出可以推薦的資源。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"② 分級分發:從用戶創作的內容挖掘出優質資源之後,跟着的就是冷啓動階段。根據用戶的賬號等級,給資源初始曝光量,在曝光量打到設定的值之後根據反饋的數據與資源的平均數據進行對比,如果反饋效果更好的話就增加曝光量,在擴大曝光幾次之後,如果資源的反饋仍然比較好,就用雙塔模型對資源進行一個保量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"③ 召回:召回模型採用的是雙塔模型,不過和傳統的雙塔模型相比,這裏只用到了作品的源信息,沒有用到後續的信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在完成保量過程之後優秀的作品會轉入到流量流轉階段,這個階段和分級分發類似,每個推薦週期結束後根據一些指標對內容進行評估。比如看點擊率、完播率這些,根據這些表現來確定是不是要把它放到更大一級的流量池裏面去分發。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"召回模型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"完成了內容創作者資源的挖掘之後,從每日上傳的內容裏面可以獲取到比較優秀的內容,構建內容池,然後對這個內容池來做個性化召回。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 召回模型—總覽"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/bc\/bcdb9838a6bdb205b5522214c220aa13.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"全民K歌的召回主要分爲三類:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"屬性召回:用戶在看什麼內容,說明用戶對於這類屬性的物品有一個偏好,然後可以根據這些偏好去做點對點的召回,召回一些帶有用戶偏好屬性的內容;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模型召回:從用戶和item的建模角度,把用戶和item建模到同一個向量空間,之後可以按照相關檢索去爲用戶做一個召回;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其他召回:除了上述兩種召回以外,基於實時熱門內容、LBS(基於位置服務)、關係鏈召回也可以召回少量數據作爲補充。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 召回模型—畫像屬性召回"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b2\/b210167116173d1fd9814618dfd16cd7.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"基於用戶畫像的屬性召回的原理比較簡單:根據全平臺的流水(如搜索、播放、點贊、分享、關注和點唱等用戶行爲),實時計算用戶在我們平臺的各個維度(如音頻標籤、視頻標籤、伴奏、歌手、創作者)的偏好。最終選取用戶比較高的偏好維度的一系列屬性來爲用戶去做召回。這種召回對於用戶的感知性很強,因爲召回結果和用戶的實時行爲時有強相關的關係。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 召回模型—屬性向量化"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/2f\/2f27af6ba91dda1a895abda3c6bf2696.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"單純用點對點的屬性召回是存在問題的:這樣的召回比較死板,沒有考慮到屬性之間的相似性。爲了解決這個問題,這裏引進了屬性向量化,訓練屬性的embedding,根據屬性直接的相似關係進行相似擴展。比如用戶喜歡的伴奏,可以擴展到相似的伴奏然後尋找作品。用戶喜歡某個作者,也可以擴展到風格相似的作者。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"召回模型實踐"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在介紹完召回模型的理論部分之後,下面介紹一下召回模型的實踐以及實踐中的探索優化"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 召回模型實踐—模型化召回"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/d5\/d54e40076472cfbd270f20d0efcf8e05.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模型化的召回是相似性的表徵建模:通過模型把用戶和物品encode到相同維度的向量空間,在最後一層進行相似性交互(cosine,dot等相似性計算方法),線上通過最近鄰來召回最相似的內容。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模型化召回典型結構有三種:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"只有Embedding層:矩陣分解"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶單塔+softmax:Youtube-DNN"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雙塔+cosine:DSSM"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"全民K歌線上採用的是第三種結構,和排序模型相比有幾個需要注意的問題:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比排序,召回面臨的搜索空間更大。排序只是把少量內容進行打分然後按照分數從高到低排序,但是召回要面臨的數據更多,而且數據分佈也不相同,所以選擇負樣本非常重要。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"線上檢索速度有要求,時間太長會影響用戶體驗,所以無法引入用戶的item的交叉特徵,導致模型的表達能力比起排序模型偏弱。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲個性化分發的起點,需要引入debias機制,緩解bias循環"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 召回模型實踐—負樣本選取"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/1b\/1bed20b869c1eef149aa438c4936fff7.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在排序和召回模型兩塊工作中,看到的內容視角是不一樣的。在召回階段,候選的物品是整個全集;而在排序階段,候選的物品只是全集的子集,因爲待排序的物品是召回模型篩選之後的結果。正是視角的不同,所以召回和排序的採樣方法不一樣。在召回階段,隨機負採樣的效果往往優於曝光未點擊。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 召回模型實踐—增強單塔的表達能力"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用於召回的雙塔模型存在一個問題:不能用到用戶和item之間的交互特徵,前面說過這樣導致的結果就是導致表達能力偏弱。所以需要做一些優化來增強單塔的表達能力。具體的做法是利用用戶比較穩定的一些行爲序列,再加上用戶的用戶畫像的的一些基礎信息,根據這些來構建用戶的隱藏的表徵。然後基於這個表徵,去篩選用戶的動態,比如播放、點擊這種比較穩定的行爲動態,這樣就能得到一些和當前預測目標更相關的信息。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"4. 召回模型—最終模型"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fb\/fb4cd8338740a442c4360b2915158b67.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最終經歷了熱度負採樣、Hard-Negative Mining和序列Attention三個優化之後,整體的模型上線之後效果得到了比較不錯的提升,說明這些工作是有效的。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"5. 召回模型實踐—Debias"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/91\/91cf6e418b46a6caf977a4aa83f76821.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實踐中發現推薦系統中存在着比較明顯的bias循環:用戶對於一個物品的轉化,包括一個曝光的漏斗和一個曝光到轉化的漏斗。如果我們只考慮轉換這一層的漏斗,就會有誇大高曝光物品的可能,這就會偏離用戶的真實偏好。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/f9\/f9b96d6c3d034dbe74666652fc55a946.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了驗證這個猜想,在全民k歌中選取了一個場景來做測試,採用的方案是全局樣本補充+IPS加權的方案,包括以下的操作:"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"(user,item,rating)從推薦場景擴充到全平臺主動性爲"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rating的置信度與Propensity Score關聯起來,降低高曝光正樣本的權重,增加低曝光正樣本的權重"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"IPS變換和截斷"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個方案上線以後也取得了一定的收益,說明bias的循環是存在的。採取上述方案Debias是成功的。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"總結和展望"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/9b\/9bd4f25a89f2a6a821c3995b2d8f6b91.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在未來,我們還會在三個方面進一步探索,一是通過更精細的流量分發控制提升優質內容的冷啓及進入高展的速度;二是實時畫像又統計方式切換到模型方式;三是模型召回也加入多目標的思考。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"文章作者:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"timmyqiu"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"騰訊音樂 | 應用研究"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2016年南京大學計算機系碩士畢業,同年加入騰訊SNG數字音樂部,先後負責過QQ音樂的畫像和每日30首推薦的算法相關工作。2018年底至今在全民K歌負責UGC作品的推薦算法開發與相關的工程實現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文轉載自:DataFunTalk(ID:dataFunTalk)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"},{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s\/DiFvzlGSpKRTk8FHTFQLRQ","title":"xxx","type":null},"content":[{"type":"text","text":"全民K歌內容挖掘與召回"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章