基於gensim的Deep learning with paragraph2vec 官方models.doc2vec文檔解釋

♦版權聲明:轉載時請註明出處URL,謝謝大家~

♦文章聲明:博主爲在校生,基於學習興趣作此文章,與大家分享。水平有限,懇請大家批評指正~


gensim介紹 【官網

gensim是一款強大的自然語言處理工具,裏面包括N多常見模型:

- 基本的語料處理工具有:

- LSI - LDA - HDP - DTM - DIM - TF-IDF - word2vec、paragraph2vec

models.doc2vec – Deep learning with paragraph2vec【官方原文鏈接

通過分佈式存儲和分佈式的詞袋模型,使用層次softmax或者負採樣進行深度學習

安裝gensim前確保你有C語言解釋器以使doc2vec的訓練最優。(提升70倍)

以一個例子來初始化模型:

>>> model= Doc2Vec(documents, size=100, window=8, min_count=5, workers=4)

將模型保存到硬盤:

>>> model.save(fname)

>>> model= Doc2Vec.load(fname) #可以下載模型來繼續訓練

模型同樣可以從硬盤上的C格式實例化得來。

>>> model= Doc2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False# C text format

>>> model= Doc2Vec.load_word2vec_format('/tmp/vectors.bin', binary=True# C binary format

  

 

class gensim.models.doc2vec.Doc2Vec(documents=Nonesize=300alpha=0.025window=8min_count=5max_vocab_size=Nonesample=0,seed=1workers=1min_alpha=0.0001dm=1hs=1negative=0dbow_words=0dm_mean=0dm_concat=0dm_tag_count=1docvecs=None,docvecs_mapfile=Nonecomment=Nonetrim_rule=None**kwargs)

Bases: gensim.models.word2vec.Word2Vec

這是用來訓練的類,使用和評價http://arxiv.org/pdf/1405.4053v2.pdf中描述的神經網絡。

從可迭代的文檔初始化模型,每個文件都是被標記的對象,用來訓練。

可迭代的文檔可以是簡單的一系列的被標記了的文件元素,但對於更大的語料庫,考慮可直接從磁盤/網絡流式傳輸文檔的迭代。。

如果你沒有提供文件,模型就不被初始化,要使用模型的話就要提供其他辦法來初始化。

dm 定義了訓練的算法。默認是dm=1,使用 ‘distributed memory’ (PV-DM),否則 distributed bag of words (PV-DBOW)

size 是特徵向量的緯度。

window 是要預測的詞和文檔中用來預測的上下文詞之間的最大距離。

alpha 是初始化的學習速率,會隨着訓練過程線性下降。

seed 是隨機數生成器。.需要注意的是,對於一個完全明確的重複運行(fully deterministically-reproducible run),你必須同時限制模型單線程工作以消除操作系統線程調度中的有序抖動。(在python3中,解釋器啓動的再現要求使用PYTHONHASHSEED環境變量來控制散列隨機化)

min_count 忽略總頻數小於此的所有的詞。

max_vocab_size 在詞彙累積的時候限制內存。如果有很多獨特的詞多於此,則將頻率低的刪去。每一千萬詞類大概需要1G的內存,設爲None以不限制(默認)。

sample 高頻詞被隨機地降低採樣的閾值。默認爲0(不降低採樣),較爲常用的事1e-5

workers 使用多少現成來訓練模型(越快的訓練需要越多核的機器)。

iter 語料庫的迭代次數。從Word2Vec中繼承得到的默認是5,但在已經發布的‘Paragraph Vector’中,設爲10或者20是很正常的。

hs 如果爲1 (默認),分層採樣將被用於模型訓練(否則設爲0)。

negative 如果 > 0,將使用負採樣,它的值決定干擾詞的個數(通常爲5-20)。

dm_mean 如果爲0(默認),使用上下文詞向量的和;如果爲1,使用均值。(僅在dm被用在非拼接模型時使用)

dm_concat 如果爲1,使用上下文詞向量的拼接,默認是0。注意,拼接的結果是一個更大的模型,輸入的大小不再是一個詞向量(採樣或算術結合),而是標籤和上下文中所有詞結合在一起的大小。

dm_tag_count 每個文件期望的文本標籤數,在使用dm_concat模式時默認爲1

dbow_words 如果設爲1,訓練word-vectors (in skip-gram fashion) 的同時訓練 DBOW doc-vector。默認是0 (僅訓練doc-vectors時更快)

trim_rule 詞彙表修建規則,用來指定某個詞是否要被留下來。被刪去或者作默認處理 (如果詞的頻數< min_count則刪去)。可以設爲None (將使用min_count),或者是隨時可調參 (word, count, min_count) 並返回util.RULE_DISCARD,util.RULE_KEEP ,util.RULE_DEFAULT之一。注意:這個規則只是在build_vocab()中用來修剪詞彙表,而且沒被保存。

 

accuracy(questionsrestrict_vocab=30000most_similar=<functionmost_similar>case_insensitive=True)

計算模型精度。 questions 是一個文件名,其中lines4-tuples of words, ”: SECTIONNAME” lines切分。 See questions-words.txt in https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/word2vec/source-archive.zip for an example.

每部分分別輸出精度的值(打印到日誌並以列表形式返回),最後再加上一個總得摘要。

使用restrict_vocab 來忽視所有questions containing a word not in the first restrict_vocab words(默認30,000).如果你已經將詞彙表按照頻數降序排列,這將很有意義。如果 case_insensitive True, the first restrict_vocab words are taken first,這種情況下將執行標準化。

使用case_insensitive 在評估詞彙表之前將問題和詞彙表中所有的詞轉化爲他們的大寫形式 (默認爲True)。在訓練字符和問題詞不匹配是很有用。爲防止一個詞的多種變體,取第一次出現的向量(同時也是最高頻的,如果詞彙表已經排序了的話)。

這個方法與原始的C word2veccompute-accuracy 腳本相似。

build_vocab(sentenceskeep_raw_vocab=Falsetrim_rule=Noneprogress_per=10000update=False)

從一系列句子中建立詞彙表(可以是一次生成流a once-only generator stream)。每個句子必須是一串的unicode字符.

clear_sims()

create_binary_tree()

用根據詞出現次數排好序的詞彙表建立二元霍夫曼樹。高頻詞有更短的編碼,在 build_vocab()中被調用。

dbow

dm

doesnt_match(words)

列表中哪個詞和別的詞不匹配?

例子:

>>> trained_model.doesnt_match("breakfast cereal dinner lunch".split())

'cereal'

estimate_memory(vocab_size=Nonereport=None)

估計使用當前設置的模型所需的內存。

finalize_vocab(update=False)

基於最終詞彙設置構建表和模型權重。

infer_vector(doc_wordsalpha=0.1min_alpha=0.0001steps=5)

對於給定的批量(post-bulk)培訓文檔,推斷向量。

文檔應該是一連串(字)字符組成的列表。

init_sims(replace=False)

預計算L2歸一化向量。

如果 replace 已經被設置,忘記原始向量,只保留歸一化的值=節省大量的內存!

注意,進行替換後,您無法繼續訓練。模型變成高效的只讀 =你可以調用 most_similar,similarity 等,但不能進行訓練。

intersect_word2vec_format(fnamelockf=0.0binary=Falseencoding='utf8'unicode_errors='strict')

從給定的原始C word2vec工具格式合併輸入隱藏權重矩陣,其中它與當前詞彙相交。(沒有字被添加到現有詞彙表,但相交字採用文件的權重,並且不相交的單詞被留下。)

binary 是一個布爾值,表示數據是否爲二進制word2vec格式。

lockf 是要爲任何導入的詞矢量設置的鎖定因子值;默認值0.0防止在後續訓練期間向量的進一步更新。使用1.0允許進一步訓練更新合併的向量。

load(*args**kwargs)

load_word2vec_format(fnamefvocab=Nonebinary=Falseencoding='utf8'unicode_errors='strict'limit=Nonedatatype=<type'numpy.float32'>)

從原始C word2vec工具格式(original C word2vec-tool format)加載輸入隱藏權重矩陣。

請注意,存儲在文件中的信息是不完整的(二叉樹丟失),因此,雖然可以查詢單詞相似性等,但不能繼續使用以此方式加載的模型進行訓練。

binary 是一個布爾值,表示數據是否爲二進制word2vec格式。 norm_only 是一個布爾值,表示是否只將標準化的word2vec向量存儲在存儲器中。字計數從fvocab的文件名(如果有設置)讀取(這是由原始C工具的-save-vocabflag生成的文件)。

如果您使用非utf 8編碼爲這些字訓練C模型,請在encoding中指定編碼。 .

unicode_errors,默認爲‘strict’是一個適合作爲errors 參數傳遞給unicode() (Python 2.x) str() (Python 3.x)函數的字符串。如果您的源文件可能包含在多字節unicode字符中間截斷的字標記(正如在原始word2vec.c工具中常見的那樣),“ignore”或“replace”可能有所幫助。

limit 設置從文件讀取的字矢量的最大數量。默認值爲None,表示讀取所有。

datatype (experimental)可以將維度強制轉換爲非默認浮動類型(例如np.float16)以節省內存。(這種類型可能導致更慢的批量操作或與優化例程不兼容)

log_accuracy(section)

make_cum_table(power=0.75domain=2147483647)

使用存儲的詞彙詞計數在負抽樣訓練例程中繪製隨機詞來創建累積分佈表。

要繪製單詞索引,請選擇一個隨機整數直到表中的最大值(cum_table [-1]),然後找到整數的排序插入點(如通過bisect_leftndarray.searchsorted())。該插入點是繪製的索引,按比例等於該時隙處的增量。

內部調用 ‘build_vocab()’.

most_similar(positive=[]negative=[]topn=10restrict_vocab=Noneindexer=None)

找出前N個最相似的詞。積極的詞有助於積極的相似性,消極的詞則相反。

該方法計算給定單詞投影權重向量的簡單平均值與模型中每個單詞的向量之間的餘弦相似性。該方法對應於原始word2vec實現中的word-analogydistance 腳本。

如果topnFalsemost_similar返回相似度分數的向量。

restrict_vocab 是一個可選的整數,它限制了搜索最相似值的向量的範圍。例如,restrict_vocab = 10000將只檢查詞彙順序中前10000個單詞向量。(如果您按頻率降序排序詞彙表,這將很有意義。)

例:

>>> trained_model.most_similar(positive=['woman','king'], negative=['man'])

[('queen', 0.50882536), ...]


most_similar_cosmul(positive=[]negative=[]topn=10)

使用Omer LevyYoav Goldberg[4]中提出的乘法組合目標尋找前N個最相似的詞。積極的詞對於相似性仍然是積極地,而消極詞是負面地,但對一個大距離支配計算有較小的易感性。

在常見的類比解決(analogy-solving)情況中,在兩個正例和一個負例中,該方法等效於LevyGoldberg的“3CosMul”目標(等式(4))。

附加的正或負例子分別對分子或分母做出貢獻 -該方法的一個潛在敏感但未測試的擴展。(有一個正面的例子,排名將與默認most_similar中的相同)

例:

>>> trained_model.most_similar_cosmul(positive=['baghdad','england'], negative=['london'])

[(u'iraq', 0.8488819003105164), ...]

[4]

Omer Levy and Yoav Goldberg. Linguistic Regularities in Sparse and Explicit Word Representations, 2014.

n_similarity(ws1ws2)

計算兩組字之間的餘弦相似度。

例:

>>> trained_model.n_similarity(['sushi','shop'], ['japanese','restaurant'])

0.61540466561049689

 

>>> trained_model.n_similarity(['restaurant','japanese'], ['japanese','restaurant'])

1.0000000000000004

 

>>> trained_model.n_similarity(['sushi'], ['restaurant'])== trained_model.similarity('sushi','restaurant')

True


reset_from(other_model)

重複使用other_model的共享結構。

reset_weights()

save(*args**kwargs)

將對象保存到文件。 (相同的參見 load)

fname_or_handle 是指定要保存到的文件名的字符串,或是可以寫入的打開了的類似文件的對象。如果對象是文件句柄,則不執行特殊的數組處理;所有屬性將被保存到同一個文件。

如果separately None,將自動檢測正在存儲的對象中的numpy / scipy.sparse數組,並將它們存儲在單獨的文件中。這避免了pickle內存錯誤,並允許有效地將mmap’ing大陣列返回到負載。

您也可以手動設置separately ,在這種情況下,它必須是存儲在單獨文件中的屬性名稱列表。在這種情況下不執行自動檢查。

ignore 是一組不能序列化的屬性名(文件句柄,緩存等)。在後續load()上,這些屬性將設置爲None

pickle_protocol 默認爲2,所以pickled對象可以在Python 23中導入。

save_word2vec_format(fnamefvocab=Nonebinary=False)

將輸入隱藏權重矩陣存儲爲與原始C word2vec工具使用的相同的格式,以實現兼容性。

fname 是用於保存向量fvocab是用於保存詞彙的可選文件binary是一個可選的布爾值,指示數據是否要以二進制word2vec格式保存(默認爲False

scale_vocab(min_count=Nonesample=Nonedry_run=Falsekeep_raw_vocab=Falsetrim_rule=Noneupdate=False)

min_count (放棄較不頻繁的字詞)sample (控制高頻字的降低採樣)應用詞彙設置。

調用時若 dry_run=True ,將只模擬所提供的設置,並報告保留的詞彙量,有效語料庫長度和估計的所需內存的大小。結果通過日誌記錄打印,並作爲dict返回。

除非有設置keep_raw_vocab,否則在縮放完成後,刪除原始詞彙表以釋放RAM

scan_vocab(documentsprogress_per=10000trim_rule=Noneupdate=False)

score(sentencestotal_sentences=1000000chunksize=100queue_factor=2report_delay=1)

記錄一系列句子的對數概率(可以是一次性生成器流)。每個句子必須是unicode字符串的列表。這不以任何方式改變擬合模型(參見Word2Vec.train())。

我們目前只實現分層softmax方案的分數,所以你需要以hs = 1negative = 0運行word2vec

注意,你應該指定total_sentences;如果你要求超過這個數量的句子的得分,將會遇到問題,但是如果設置的值太高,效率會低下。

有關如何在文檔分類中使用這些分數的示例,請參閱[taddy]的文章和[deepir]gensim演示。.

[taddy]

Taddy, Matt. Document Classification by Inversion of Distributed Language Representations, in Proceedings of the 2015 Conference of the Association of Computational Linguistics.

 

[deepir]

https://github.com/piskvorky/gensim/blob/develop/docs/notebooks/deepir.ipynb

seeded_vector(seed_string)

創建一個“隨機”向量(但由seed_string確定)

similar_by_vector(vectortopn=10restrict_vocab=None)

通過向量找出前N個最相似的詞。

如果topnFalsesimilar_by_vector返回相似性分數的向量。

restrict_vocab是一個可選整數,它限制了搜索最相似值的向量的範圍。例如,restrict_vocab = 10000將只檢查詞彙順序中前10000個單詞向量。(如果您按頻率降序排序詞彙表,這將很有意義。)

例:

>>> trained_model.similar_by_vector([1,2])

[('survey', 0.9942699074745178), ...]


similar_by_word(wordtopn=10restrict_vocab=None)

找出前N個最相似的詞。

如果topnFalsesimilar_by_word返回相似性分數的向量。

restrict_vocab是一個可選整數,它限制了搜索最相似值的向量的範圍。例如,restrict_vocab = 10000將只檢查詞彙順序中前10000個單詞向量。(如果您按頻率降序排序詞彙表,這將很有意義。)

例:

>>> trained_model.similar_by_word('graph')

[('user', 0.9999163150787354), ...]


similarity(w1w2)

計算兩個詞之間的餘弦相似度。

例:

>>> trained_model.similarity('woman','man')

0.73723527

>>> trained_model.similarity('woman','woman')

1.0


sort_vocab()

排序詞彙表,使最高頻的單詞具有最低的索引。

train(sentencestotal_words=Noneword_count=0total_examples=Nonequeue_factor=2report_delay=1.0)

從一系列句子更新模型的神經權重(可以是一次性生成器流)。對於Word2Vec,每個句子必須是一個unicode字符串的列表。(子類可以接受其他示例。)

爲了支持從(初始)alphamin_alpha的線性學習速率的衰減,應提供total_examples(句子數)或total_words(句子中原始單詞的計數),除非句子與用於最初構建詞彙表的句子相同。

update_weights()

複製所有現有權重,並重置新添加的詞彙表的權重。

wmdistance(document1document2)

計算Word Mover的兩個文檔之間的距離。

請注意,如果其中一個文檔沒有Word2Vec詞彙表中存在的詞語,則將返回float'inf')(即無窮大)。

這個方法只有當pyemd安裝後纔可以工作(可以通過pip安裝,但需要一個C編譯器)。

例:

>>> # Train word2vec model.

>>> model= Word2Vec(sentences)

>>> # Some sentences to test.

>>> sentence_obama='Obama speaks to themedia in Illinois'.lower().split()

>>> sentence_president='The president greetsthe press in Chicago'.lower().split()

>>> # Remove their stopwords.

>>> fromnltk.corpusimport stopwords

>>> stopwords= nltk.corpus.stopwords.words('english')

>>> sentence_obama= [wfor win sentence_obamaif wnotin stopwords]

>>> sentence_president= [wfor win sentence_presidentif wnotin stopwords]

>>> # Compute WMD.

>>> distance= model.wmdistance(sentence_obama,sentence_president)


class gensim.models.doc2vec.Doctag

Bases: gensim.models.doc2vec.Doctag

在初始詞彙掃描期間發現的字符串文檔標記。document-vectorVocab對象等效。)

如果所有提交的文檔標籤都是int,則不會使用。

The offset is only the true index into thedoctags_syn0/doctags_syn0_lockf if-and-only-if no raw-int tags were used.如果使用任何raw-int標記,則字符串Doctag向量開始於索引(max_rawint + 1),因此真索引爲(rawint_index + 1+ offset)。另請參見DocvecsArray.index_to_doctag()。

新建Doctag(offset, word_count, doc_count)實例

count(value) →integer --返回值的出現次數

doc_count:字段2的別名

index(value[, start[, stop]]) →integer --返回第一個索引值

如果值不存在,則引發ValueError

offset:字段號0的別名

repeat(word_count)

word_count:字段號1的別名

class gensim.models.doc2vec.DocvecsArray(mapfile_path=None)

Bases: gensim.utils.SaveLoad

numpy數組中在訓練期間/之後的doc向量的默認存儲。

作爲Doc2Vec模型的'docvecs'屬性,允許訪問和比較文檔向量。

>>> docvec= d2v_model.docvecs[99]

>>> docvec= d2v_model.docvecs['SENT_99'# if string tag used in training

>>> sims= d2v_model.docvecs.most_similar(99)

>>> sims= d2v_model.docvecs.most_similar('SENT_99')

>>> sims= d2v_model.docvecs.most_similar(docvec)

如果在訓練期間只顯示純int標籤,則dictof string tag - > index)和listindex - > string tag)保持空,節省內存。

提供mapfile_path(通過使用'docvecs_mapfile'值初始化Doc2Vec模型)將使用一對內存映射文件作爲支持doctag_syn0 / doctag_syn0_lockf值的數組。

Doc2Vec模型自動使用此類,但是基於另一種持久機制(如LMDBLevelDBSQLite)的未來可替代實現也應該是可能的。

borrow_from(other_docvecs)

clear_sims()

doesnt_match(docs)

給定的列表中哪個文檔與其他的不符?

(TODO: 接受訓練集外文檔的向量,如同推理一樣)

estimated_lookup_memory()

標籤查找的估計內存,如果使用純int標籤則爲0

index_to_doctag(i_index)

返回給定i_index的字符串鍵(如果可用)。否則返回raw int doctagsame int)。

indexed_doctags(doctag_tokens)

用於訓練示例的返回索引和支持數組(backing-arrays)。

init_sims(replace=False)

預計算L2歸一化向量。

如果設置了replace,則忘記原始向量,只保留歸一化的向量=節省大量內存!

請注意,執行替換後,您無法繼續訓練或推斷。模型變得有效只讀=你可以調用most_similarsimilarity 等,但不能是train infer_vector

load(fnamemmap=None)

從文件加載先前保存的對象(也請參閱save)。

如果對象是使用單獨存儲的大型數組保存的,則可以使用mmap ='r'通過mmap(共享內存)加載這些數組。默認值:不使用mmap,將大數組作爲普通對象加載。

如果正在加載的文件被壓縮('.gz''.bz2'),則必須設置mmap = None如果遇到此情況,Load將引發IOError

most_similar(positive=[]negative=[]topn=10clip_start=0clip_end=Noneindexer=None)

找到從訓中練知道的前N個最相似的docvecs積極docs對相似性有正面影響,而消極docs爲負面。

該方法計算給定文檔的投影權重向量的簡單平均值之間的餘弦相似性。 Docs可以被指定爲向量,被訓練的docvecs的整數索引,或者如果文檔最初通過相應的標記用字符串標記。

'clip_start''clip_end'允許將結果限制到底層doctag_syn0norm向量的特定連續範圍。(如果選擇的順序很重要,這將會很有用,例如較低索引中的更受歡迎的標籤ID)。

n_similarity(ds1ds2)

計算來自訓練集的兩組docvecs之間的餘弦相似性,由int indexstringtag指定。TODO:接受訓練集外文檔的向量,如同推理一樣)

note_doctag(keydocument_nodocument_length)

在初始語料庫掃描期間,請記下文檔標籤,以便進行結構大小調整。

reset_weights(model)

save(fname_or_handleseparately=Nonesep_limit=10485760ignore=frozenset([])pickle_protocol=2)

Save the object to file (also see load).

fname_or_handle 是指定的要保存到的文件名的字符串,或是可以寫入的打開的類似文件的對象。如果對象是文件句柄,則不執行特殊的數組處理;所有屬性將被保存到同一個文件。

如果 separately None,則自動檢測正在存儲的對象中的大numpy / scipy.sparse數組,並將它們存儲在單獨的文件中。這避免了pickle memory errors,並允許有效地將mmap’ing大陣列返回到負載。

您也可以手動單獨設置,在這種情況下,它必須是存儲在單獨文件中的屬性名稱列表。在這種情況下不執行自動檢查。

ignore 是一組不能序列化的屬性名(文件句柄,緩存等)。在後續load()上,這些屬性將設置爲None

pickle_protocol 默認爲2,所以pickled對象可以在Python 23中導入。

similarity(d1d2)

計算訓練集中兩個docvecs之間的餘弦相似性,由int indexstring tag指定。TODO:接受訓練集外文檔的向量vectors of out-of-training-set docs,如同推理一樣)

similarity_unseen_docs(modeldoc_words1doc_words2alpha=0.1min_alpha=0.0001steps=5)

計算訓練文檔之間的兩個後批量(post-bulk)的餘弦相似性。

文檔應該是一連串(字)符的列表。

trained_item(indexed_tuple)

保持對給定索引所做的任何更改(匹配由先前indexed_doctags()返回的元組);這個實現的無操作(a no-op forthis implementation )

class gensim.models.doc2vec.LabeledSentence(*args**kwargs)

Bases: gensim.models.doc2vec.TaggedDocument

新建 TaggedDocument(words, tags)實例

count(value) →integer --返回值的出現次數

index(value[, start[, stop]]) →integer --返回第一個索引值。如果值不存在,則引發ValueError

tags:字段號1的別名

words:字段號0的別名

class gensim.models.doc2vec.TaggedBrownCorpus(dirname)

Bases: object

迭代Brown語料庫(NLTK數據的一部分)中的文檔,將每個文檔作爲Tagged Document對象。

class gensim.models.doc2vec.TaggedDocument

Bases: gensim.models.doc2vec.TaggedDocument

單個文檔,由單詞(unicode字符串標記列表)和標記(標記列表)組成。標籤可以是一個或多個unicode字符串標記,但典型的做法(這也將是最高效的內存)是爲標籤列表用唯一的整數id作爲唯一的標籤。

Word2Vec替換“句子作爲詞列表”。

新建TaggedDocument(words, tags)實例

count(value) →integer --返回值的出現次數

index(value[, start[, stop]]) →integer --返回第一個索引值。如果值不存在,則引發ValueError

Tags:字段號1的別名

words:字段號0的別名

class gensim.models.doc2vec.TaggedLineDocument(source)

Bases: object

簡單格式:一個文檔 =一行 =一個TaggedDocument對象。

預期字詞必須經過預處理並以空格分隔,標籤會自動從文檔行號構建。

source 可以是字符串(filename)或文件對象。

例:

documents = TaggedLineDocument('myfile.txt')

或對於壓縮文件:

documents = TaggedLineDocument('compressed_text.txt.bz2')

documents = TaggedLineDocument('compressed_text.txt.gz')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章