搜尋
首頁科技週邊人工智慧了解連續的單詞袋(CBOW)

語義很重要,因為在NLP中,這是正在研究的單詞之間的關係。最簡單但最有效的過程之一是連續的單詞袋(CBOW),將單詞映射到稱為單詞向量的高度有意義的向量。 CBow在Word2Vec框架中使用,並根據與之相鄰的單詞預測一個單詞,該單詞捕獲了語言的語義和語法含義。在本文中,讀者將了解CBOW模型的操作以及其使用方法。

學習目標

  • 了解CBOW模型背後的理論。
  • 了解CBow和Skip-gram之間的差異。
  • 使用示例數據集實現Python中的CBOW模型。
  • 分析CBOW的優勢和局限性。
  • 探索CBOW生成的單詞嵌入的用例。

目錄

  • 什麼是連續的單詞模型?
  • 連續的單詞如何工作
  • CBow架構詳細解釋
  • 從頭開始編碼CBOW(帶有Python的示例)
  • 連續袋的優點
  • 連續的單詞袋的局限
  • 常見問題

什麼是連續的單詞模型?

連續的單詞袋(CBOW)也是一種模型,它在使用神經網絡確定嵌入單詞時使用,並且是Tomas Mikolov的Word2Vec模型的一部分。 CBow試圖根據給定句子觀察的上下文單詞預測目標詞。這樣,它就能捕獲語義關係,因此在高維空間中密切表示近距離表示。

例如,在“貓坐在墊子上”的句子中,如果上下文窗口大小為2,則“ sat”的上下文單詞是[“”,“”,“ cat”,“ on”,“ the”] 並且該模型的任務是預測“ sat”一詞。

CBOW通過匯總上下文單詞(例如,平均嵌入)並使用此匯總表示來預測目標單詞來運行。該模型的體系結構涉及上下文單詞的輸入層,用於嵌入生成的隱藏層以及使用概率分佈預測目標單詞的輸出層。

這是一個適合處理頻繁單詞的快速高效模型,非常適合需要語義理解的任務,例如文本分類,推薦系統和情感分析。

連續的單詞如何工作

CBow是根據上下文的最簡單,有效的技術之一,用於單詞嵌入,其中整個單詞的詞彙映射到向量。本節還將CBOW系統的操作描述為在其最基本的層面上理解該方法的一種手段,討論了基於CBOW方法的主要思想,並為CBOW命中計算系統的架構佈局提供了綜合指南。

了解上下文和目標詞

CBow依靠兩個關鍵概念:上下文單詞和目標詞。

  • 上下文詞:這些是定義的窗口大小中的目標詞圍繞目標單詞的單詞。例如,在句子中:
    “快速的棕色狐狸跳過懶狗”
    如果目標詞是“ fox” ,而上下文窗口大小為2,則上下文單詞為[“快速”,“棕色”,“跳”,“ Over”]
  • 目標詞:這是CBOW旨在預測上下文單詞的單詞。在上面的示例中,目標詞是“狐狸”

通過分析上下文與大型語料庫中的目標單詞之間的關係,CBOW生成嵌入,以捕獲單詞之間的語義關係。

CBOW的逐步過程

這是CBOW工作原理的細分,分步:

步驟1:數據準備

  • 選擇文本語料庫(例如,句子或段落)。
  • 將文本歸為單詞並構建詞彙。
  • 定義上下文窗口大小nnn(例如,每側2個單詞)。

步驟2:生成上下文目標對

  • 對於語料庫中的每個單詞,請根據窗口大小提取其周圍的上下文單詞。
  • 示例:對於“我愛機器學習”和n = 2n = 2n = 2的句子,對是:目標詞上下文單詞愛[i”,“ machine”]機器[“愛”,“學習”]

步驟3:單速編碼

基於詞彙大小,將上下文單詞和目標單詞轉換為單熱矢量。對於大小5的詞彙,“愛”一詞的單次表示可能看起來像[0、1、0、0、0、0]

步驟4:嵌入層

通過嵌入層傳遞單熱編碼的上下文單詞。該層將每個單詞映射到密集的向量表示,通常比詞彙大小較低。

步驟5:上下文聚合

匯總所有上下文單詞的嵌入(例如,平均或求和它們)形成單個上下文向量。

步驟6:預測

  • 將聚合的上下文向量饋入具有軟磁輸出層的完全連接的神經網絡。
  • 該模型根據詞彙上的概率分佈預測最可能的單詞作為目標。

步驟7:損失計算和優化

  • 使用跨透鏡損失函數計算預測和實際目標詞之間的誤差。
  • 反向傳播誤差以調整嵌入和預測層中的權重。

步驟8:對所有對重複

重複語料庫中所有上下文目標對的過程,直到模型收斂為止。

CBow架構詳細解釋

連續的單詞(CBOW)模型架構旨在根據其周圍上下文單詞進行預測目標單詞。它是一個具有直接但有效結構的淺神經網絡。 CBOW架構由以下組件組成:

輸入層

  • 輸入表示
    該模型的輸入是上下文單詞表示為單熱編碼向量
    • 如果詞彙大小為v,則每個單詞表示為大小為V的單式向量,在索引處單個1表示與單詞相對應的索引,而在其他地方為0。
    • 例如,如果詞彙為[“貓”,“狗”,“狐狸”,“樹”,“鳥”]和“狐狸”一詞是第三個單詞,則其一hot矢量為[0,0,1,0,0] [0,0,0,0,1,1,0,0,0] [0,0,1,1,0,0]。
  • 上下文窗口
    上下文窗口大小n確定了使用的上下文單詞的數量。如果n = 2,則使用目標單詞的每一側兩個單詞。
    • 對於句子: “快速的棕色狐狸跳過懶狗”和目標單詞“狐狸” ,n = 2的上下文單詞是[“快速”,“棕色”,“跳躍”,“ Over”]

嵌入層

  • 目的
    該層將在高尺寸中存在的單熱量向量轉換為最大密度和低尺寸向量。與以下事實相反:在單詞嵌入單詞中被表示為具有零值的向量,在嵌入式層中,每個單詞都由所需維度的連續向量編碼,這些維度反映了單詞含義的特定特徵。
  • 單詞嵌入矩陣
    嵌入層保持一個單詞嵌入尺寸v×d的矩陣W,其中v是詞彙大小,d是嵌入尺寸。
    • W的每一行代表單詞的嵌入。
    • 對於單熱向量XXX,將嵌入計算為W^TX X。
  • 上下文詞嵌入
    使用嵌入矩陣將每個上下文單詞轉換為相應的緻密矢量。如果窗口大小n = 2,並且我們有4個上下文單詞,則提取了這些單詞的嵌入。

隱藏層:上下文聚合

  • 目的
    將上下文單詞的嵌入組合在一起以形成單個上下文向量。
  • 聚合方法
    • 平均值:所有上下文單詞的嵌入平均以計算上下文向量。

了解連續的單詞袋(CBOW)

  • 求和:嵌入而不是平均,而是求和。

了解連續的單詞袋(CBOW)

  • 結果上下文向量:結果是單個密集的向量HHH,代表周圍單詞的匯總上下文。

輸出層

  • 目的:輸出層使用上下文向量HHH預測目標單詞。
  • 完全連接的層:上下文向量HHH通過一個完全連接的層,該層輸出了詞彙中每個單詞的原始分數。這些分數稱為邏輯。
  • Softmax Function : The logits are passed through a softmax function to compute a probability distribution over the vocabulary:

了解連續的單詞袋(CBOW)

  • 預測的目標詞:第一個原因是,在SoftMax輸出時,該算法將目標詞定義為具有最高概率的單詞。

損失功能

  • 跨透鏡損失用於將預測的概率分佈與實際目標詞(地面真相)進行比較。
  • 使用隨機梯度下降(SGD)或其變體等優化技術將損失最小化。

CBOW的示例

輸入
句子: “我愛機器學習” ,目標詞: “機器” ,上下文詞: [“我”,“愛”,“學習”]

單速編碼
詞彙: [“我”,“愛”,“機器”,“學習”,“ AI”]

  • 一旋向量:
    • “ i”:[1,0,0,0,0] [1,0,0,0,0] [1,0,0,0,0]
    • “愛”:[0,1,0,0,0] [0、1、0、0、0] [0,1,0,0,0]
    • “學習”:[0,0,0,1,0] [0,0,0,1,0] [0,0,0,1,0]

嵌入層

  • 嵌入尺寸:d = 3。
  • 嵌入矩陣W:

了解連續的單詞袋(CBOW)

嵌入:

  • “我”:[0.1,0.2,0.3]
  • “愛”:[0.4,0.5,0.6]
  • “學習”:[0.2,0.3,0.4]

聚合

  • 平均嵌入:

了解連續的單詞袋(CBOW)

輸出層

  • 計算logits,應用SoftMax並預測目標詞。

CBOW建築圖

輸入層:[“ i”,“ love”,“學習”]
     - >一式編碼
     - >嵌入層
         - >密集的嵌入
         - >匯總上下文向量
         - >完全連接的層Softmax
輸出:預測單詞“機器”

從頭開始編碼CBOW(帶有Python的示例)

現在,我們將瀏覽Python中從頭開始實施CBOW模型。

準備CBOW數據

第一個尖峰是將文本轉換為代幣,將文字與上下文對鍵對面生成的單詞與上下文作為包含目標單詞的單詞。

 copus =“快速棕狐跳過懶狗”
colpus = colpus.lower()。split()#tokenization和lowercase轉換

#定義上下文窗口大小
C = 2
context_target_pairs = []

#生成上下文目標對
對於我的範圍(c,len(corpus) -  c):
    context = copus [i -c:i] copus [i 1:i c 1]
    target = copus [i]
    context_target_pairs.append(((上下文,目標)))

print(“上下文 - 目標對:”,context_target_pairs)

輸出:

上下文目標對:[([['the','quick','fox',跳躍'],'brown'),(['quick'','','brown','''','off''],'fox'),(['brown'','fox'over'over'over'off'' “超過”,“懶惰”,“狗”],“'')]]

創建字典一詞

我們構建了一個詞彙(獨特的單詞集),然後將每個單詞映射到唯一的索引,反之亦然,以期在訓練過程中進行有效的查找。

 #創建詞彙並將每個單詞映射到索引
vocab = set(語料庫)
word_to_index = {word:idx for IDX,枚舉(vocab)中的字}}
index_to_word = {idx:Word Word,word_to_index.items()}中的idx

打印(“ word to Index字典:”,Word_to_index)

輸出:

單詞到索引字典:{'brown':0,'dog':1,'quick':2,'跳躍':3,'fox':4,'over':5,'the':6,'lazy':7}

一式編碼示例

單速編碼作品是通過將單詞形成系統中的每個單詞轉換為向量的,其中該單詞的指標為“ 1”,而其餘的地方則為“ 0”,出於很快的原因。

 def One_hot_encode(word,word_to_index):
    ONE_HOT = NP.Zeros(len(word_to_index))
    ONE_HOT [word_to_index [word]] = 1
    返回One_hot

#一個單詞“快速”的示例用法
context_one_hot = [one_hot_encode(word,word_to_index)for ['the'the','quick']]中的字
print(“'quick''的單速編碼:”,context_one_hot [1])

輸出:

單速編碼為“快速”:[0。 0。1。0。0。0。0。0。0。]

從頭開始構建CBOW模型

在此步驟中,我們創建了一個具有兩個層的基本神經網絡:一個用於單詞嵌入,另一個用於基於上下文單詞計算輸出,平均上下文並將其傳遞到網絡中。

 cbow級:
    def __init __(self,vocab_size,embedding_dim):
        #隨機初始化嵌入和輸出層的權重
        self.w1 = np.random.randn(vocab_size,embedding_dim)
        self.w2 = np.random.randn(embedding_dim,vocab_size)
        
    def向前(self,context_words):
        #計算隱藏層(上下文單詞的平均值)
        h = np.mean(context_words,axis = 0)
        #計算輸出層(SoftMax概率)
        輸出= np.dot(h,self.w2)
        返回輸出
    
    向後def(self,context_words,target_word,Learning_rate = 0.01):
        #正向通行證
        h = np.mean(context_words,axis = 0)
        輸出= np.dot(h,self.w2)
        
        #計算錯誤和梯度
        錯誤= target_word-輸出
        self.w2 = Learning_rate * np.outer(h,錯誤)
        self.w1 = Learning_rate * np.outer(context_words,錯誤)

#創建CBOW對象的示例
vocab_size = len(word_to_index)
embedding_dim = 5#讓我們假設5維嵌入

cbow_model = cbow(vocab_size,embedding_dim)

#使用隨機上下文單詞和目標(例如)
context_words = [one_hot_encode(word,word_to_index)for ['the'the','quick','fox','躍跳']中的字
context_words = np.array(context_words)
context_words = np.mean(context_words,axis = 0)#普通上下文單詞
target_word = one_hot_encode('brown',word_to_index)

#向前通過CBOW模型
輸出= cbow_model.forward(context_words)
打印(“ CBOW向前通行證的輸出:”,輸出)

輸出:

 CBOW向前通行證的輸出:[[-0.20435729 -0.23851241 -0.08105261 -0.14251447 0.20442154 0.14336586
  -0.06523201 0.0255063]
 [-0.0192184 -0.12958821 0.1019369 0.11101922 -0.177773069 -0.02340574
  -0.22222151 -0.23863179]
 [0.21221977 -0.15263454 -0.015248 0.27618767 0.02959409 0.21777961
   0.16619577 -0.20560026]
 [0.05354038 0.06903295 0.0592706 -0.13509918 -0.00439649 0.18007843
   0.1611929 0.2449023]
 [0.01092826 0.19643582 -0.07430934 -0.16443165 -0.01094085 -0.27452367
  -0.13747784 0.31185284]]]

使用TensorFlow實現CBOW

TensorFlow通過定義使用嵌入層來學習單詞表示和輸出密集層的神經網絡來簡化過程,並使用上下文單詞預測目標單詞。

導入TensorFlow作為TF

#使用TensorFlow定義簡單的CBOW模型
cbowmodel類(tf.keras.model):
    def __init __(self,vocab_size,embedding_dim):
        super(cbowmodel,self).__ init __()
        self.embeddings = tf.keras.layers.embedding(input_dim = vocab_size,output_dim = embedding_dim)
        self.output_layer = tf.keras.layers.dense(vocab_size,activation ='softmax')
    
    def呼叫(self,context_words):
        embedded_context = self.embeddings(context_words)
        context_avg = tf.reduce_mean(embedded_context,axis = 1)
        輸出= self.output_layer(context_avg)
        返回輸出

#示例用法
model = cbowmodel(vocab_size = 8,embedding_dim = 5)
context_input = np.random.randint(0,8,size =(1,4))#隨機上下文輸入
context_input = tf.convert_to_tensor(context_input,dtype = tf.int32)

#正向通行證
輸出=模型(context_input)
打印(“ Tensorflow Cbow型號的輸出:”,output.numpy())

輸出:

 TensorFlow CBOW模型的輸出:[[0.12362909 0.12616573 0.12758036 0.12601459 0.12477358 0.1237749
  0.1231998 0.12486169]]]

使用Gensim進行CBOW

Gensim在Word2Vec()函數中提供了現成的CBOW實現,其中無需在培訓上勞動,因為Gensim訓練文本語料庫的單詞嵌入。

導入Gensim
來自Gensim.models導入Word2vec

#準備數據(單詞列表列表)
copus = [[“”,“ Quick”,“ Brown”,“ Fox”],[“跳”,“ Over”,“ The”,“ lazy”,“ dog”]]

#使用CBOW訓練Word2Vec型號
model = word2vec(colpus,vector_size = 5,window = 2,min_count = 1,sg = 0)

#獲取單詞的向量表示
vector = model.wv ['fox']
打印(“'fox'的向量表示:”,向量)

輸出:

 “福克斯”的矢量表示:[-0.06810732 -0.01892803 0.11537147 -0.15043275 -0.07872207]

連續袋的優點

現在,我們將探索連續袋的優勢:

  • 有效學習單詞表示:CBOW通過使用上下文單詞有效地學習單詞的密集矢量表示。與傳統的單熱編碼相比,這會導致較低的矢量,這在計算上可能很昂貴。
  • 捕獲語義關係:CBOW基於單詞在大型語料庫中的上下文中捕獲語義關係。這使模型可以學習單詞相似性,同義詞和其他上下文細微差別,這些差異在信息檢索和情感分析之類的任務中很有用。
  • 可伸縮性:CBOW模型可擴展,並且可以有效地處理大型數據集,從而非常適合具有大量文本數據的應用程序,例如搜索引擎和社交媒體平台。
  • 上下文靈活性:CBOW可以處理不同數量的上下文(即所考慮的周圍單詞的數量),在學習單詞表示單詞所需的上下文中提供靈活性。
  • NLP任務中的性能提高了:CBOW的單詞嵌入式通過提供高質量的功能表示,增強了下游NLP任務的性能,例如文本分類,命名實體識別和機器翻譯。

連續的單詞袋的局限

現在讓我們討論CBOW的局限性:

  • 對上下文窗口大小的敏感性:CBOW的性能高度取決於上下文窗口大小。一個小窗口可能只會捕獲本地關係,而大窗口可能會模糊單詞的獨特性。找到最佳上下文大小可能具有挑戰性且依賴於任務。
  • 缺乏單詞順序敏感性:CBOW無視上下文中單詞的順序,這意味著它不會捕獲語言的順序性質。對於需要對單詞順序深入了解的任務,例如句法解析語言建模,此限制可能是有問題的。
  • 稀有詞的困難:CBOW難以生成有意義的嵌入,以實現稀有或訪問量的單詞(OOV)。該模型依賴於上下文,但是單詞不經常的數據稀疏會導致矢量表示不良。
  • 僅限於淺色上下文理解:儘管CBOW捕獲基於周圍單詞的單詞含義,但它在理解更複雜的語言現象(例如長期依賴性,諷刺或諷刺)方面具有有限的功能,這可能需要更複雜的模型(例如變形金剛)。
  • 無法很好地處理多義:具有多種含義的單詞(polysemy)對於CBOW可能是有問題的。由於該模型會為每個單詞生成一個嵌入,因此與Bert或Elmo(例如BertElmo )不同,它可能無法捕獲單詞在不同上下文中所具有的不同含義。

結論

事實證明,連續的單詞(CBOW)模型是通過利用周圍環境來生成單詞嵌入的一種有效而直觀的方法。通過其簡單而有效的架構,Cbow彌合了原始文本和有意義的向量表示之間的差距,從而實現了廣泛的NLP應用程序。通過了解CBOW的工作機制,其優勢和局限性,我們可以更深入地了解NLP技術的發展。 Cbow憑藉其在嵌入生成中的基本作用,繼續成為探索先進語言模型的墊腳石。

關鍵要點

  • CBow使用其周圍環境預測目標詞,從而使其有效而簡單。
  • 它可以很好地提供頻繁的單詞,並提供計算效率。
  • CBOW學到的嵌入既捕獲語義和句法關係。
  • CBOW是理解現代單詞嵌入技術的基礎。
  • 實際應用包括情感分析,語義搜索和文本建議。

常見問題

Q1:CBOW和SKIP-GRAM有什麼區別?

答:CBOW使用上下文單詞預測目標單詞,而Skip-gram則使用目標單詞預測上下文單詞。

Q2:為什麼CBOW計算速度比Skip-gram快?

答:CBOW同時處理多個上下文單詞,而跳過gram獨立評估每個上下文單詞。

Q3:CBOW可以有效處理稀有單詞嗎?

答:不,Skip-gram通常更好地傾向於學習稀有詞的學習表示。

Q4:CBOW中嵌入層的作用是什麼?

答:嵌入層將稀疏的單熱矢量轉化為密集的表示形式,從而捕獲單詞語義。

Q5:CBOW今天仍然有意義嗎?

答:是的,儘管存在像伯特這樣的新模型,但CBOW仍然是單詞嵌入中的基礎概念。

以上是了解連續的單詞袋(CBOW)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
隨著AI的使用飆升,公司從SEO轉移到GEO隨著AI的使用飆升,公司從SEO轉移到GEOMay 05, 2025 am 11:09 AM

隨著AI應用的爆炸式增長,企業正從傳統的搜索引擎優化(SEO)轉向生成式引擎優化(GEO)。 谷歌正引領這一轉變。其“AI概述”功能已服務於超過十億用戶,在用戶點擊鏈接之前提供完整的答案。 [^2] 其他參與者也在迅速崛起。 ChatGPT、微軟Copilot和Perplexity正在創造一種全新的“答案引擎”類別,完全繞過了傳統的搜索結果。 如果您的企業沒有出現在這些AI生成的答案中,潛在客戶可能永遠不會發現您——即使您在傳統的搜索結果中排名靠前。 從SEO到GEO——這究竟意味著什麼? 幾十年來

大量賭注這些途徑將推動當今的AI成為珍貴的AGI大量賭注這些途徑將推動當今的AI成為珍貴的AGIMay 05, 2025 am 11:08 AM

讓我們探索人工通用智能(AGI)的潛在途徑。 該分析是我正在進行的《福布斯》列的AI進步的一部分,並深入研究了達到AGI和人工超智慧(ASI)的複雜性。 (請參閱相關藝術

您是訓練聊天機器人,反之亦然嗎?您是訓練聊天機器人,反之亦然嗎?May 05, 2025 am 11:07 AM

人機互動:一場互適應的微妙舞蹈 與AI聊天機器人互動,如同參與一場微妙的相互影響的舞蹈。你的提問、回應和偏好逐漸塑造著系統,使其更好地滿足你的需求。現代語言模型通過顯式反饋機制和隱式模式識別來適應用戶的偏好。它們學習你的溝通風格,記住你的偏好,並逐漸調整其回應以符合你的預期。 然而,在我們訓練數字夥伴的同時,同樣重要的事情也在反向發生。我們與這些系統的互動正在微妙地重塑我們自身的溝通模式、思維過程,甚至對人際對話的期望。 我們與AI系統的互動已經開始重塑我們對人際互動的期望。我們適應了即時回應、

加利福尼亞攻擊AI到快速賽道野火恢復許可證加利福尼亞攻擊AI到快速賽道野火恢復許可證May 04, 2025 am 11:10 AM

AI簡化了野火恢復允許 澳大利亞科技公司Archistar的AI軟件,利用機器學習和計算機視覺,可以自動評估建築計劃以符合當地法規。這種驗證前具有重要意義

美國可以從愛沙尼亞AI驅動的數字政府中學到什麼美國可以從愛沙尼亞AI驅動的數字政府中學到什麼May 04, 2025 am 11:09 AM

愛沙尼亞的數字政府:美國的典範? 美國在官僚主義的效率低下方面掙扎,但愛沙尼亞提供了令人信服的選擇。 這個小國擁有由AI支持的近100%數字化的,以公民為中心的政府。 這不是

通過生成AI的婚禮計劃通過生成AI的婚禮計劃May 04, 2025 am 11:08 AM

計劃婚禮是一項艱鉅的任務,即使是最有條理的夫婦,也常常壓倒了婚禮。 本文是關於AI影響的持續福布斯系列的一部分(請參閱此處的鏈接),探討了生成AI如何徹底改變婚禮計劃。 婚禮上

什麼是數字防禦AI代理?什麼是數字防禦AI代理?May 04, 2025 am 11:07 AM

企業越來越多地利用AI代理商進行銷售,而政府則將其用於各種既定任務。 但是,消費者倡導強調個人需要擁有自己的AI代理人作為對經常定位的辯護的必要性

商業領袖生成引擎優化指南(GEO)商業領袖生成引擎優化指南(GEO)May 03, 2025 am 11:14 AM

Google正在領導這一轉變。它的“ AI概述”功能已經為10億用戶提供服務,在任何人單擊鏈接之前提供完整的答案。 [^2] 其他球員也正在迅速獲得地面。 Chatgpt,Microsoft Copilot和PE

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),