rong SEO và nghiên cứu nội dung, việc đánh giá mức độ liên quan giữa các phần nội dung giúp cải thiện chất lượng bài viết. Công cụ này sử dụng BERT để tính toán điểm tương đồng giữa các tiêu đề (H1, H2, H3, H4) và nội dung trong Google Docs.
Bài viết này hướng dẫn bạn cách thiết lập một API Flask sử dụng BERT để tính điểm tương đồng cosine giữa nội dung và tiêu đề. Đồng thời, bạn sẽ triển khai một script trên Google Docs để tự động đánh giá mức độ liên quan giữa các tiêu đề và nội dung bài viết.
1. Cài Đặt Môi Trường Trong Google Colab
Trước khi triển khai API Flask, bạn cần cài đặt các thư viện sau trong Google Colab:
!pip install transformers torch flask pyngrok scikit-learn
- transformers: Thư viện cung cấp mô hình BERT.
- torch: Thư viện PyTorch giúp chạy mô hình học sâu.
- flask: Triển khai API RESTful.
- pyngrok: Expose API Flask ra internet.
- scikit-learn: Hỗ trợ tính toán điểm tương đồng cosine.
2. Thiết Lập API Flask Để Đánh Giá Nội Dung
Chúng ta sẽ xây dựng một API Flask sử dụng BERT để tính toán điểm tương đồng giữa một từ khóa và nội dung liên quan.
import random
from flask import Flask, request, jsonify
from transformers import BertTokenizer, BertModel
import torch
from sklearn.metrics.pairwise import cosine_similarity
from pyngrok import ngrok
import numpy as np
app = Flask(__name__)
# Khởi tạo BERT và tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
# Cố định random seed
def set_seed(seed):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
set_seed(42)
def get_embedding(text, tokenizer, model):
"""Lấy embedding của văn bản bằng token CLS."""
model.eval()
inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True, max_length=512)
outputs = model(**inputs)
cls_embedding = outputs.last_hidden_state[:, 0, :].detach().numpy()
return cls_embedding
@app.route('/similarity', methods=['POST'])
def calculate_similarity():
"""API nhận từ khóa và văn bản, tính toán điểm tương đồng cosine bằng BERT."""
try:
data = request.json
keyword = data.get('keyword')
text = data.get('text')
if not keyword or not text:
return jsonify({"error": "Both 'keyword' and 'text' are required"}), 400
keyword_embedding = get_embedding(keyword, tokenizer, model)
text_embedding = get_embedding(text, tokenizer, model)
similarity_score = cosine_similarity(keyword_embedding, text_embedding)[0][0]
return jsonify({"similarityScore": float(similarity_score)})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
ngrok.set_auth_token("YOUR_NGROK_AUTH_TOKEN")
public_url = ngrok.connect(5000)
print("Public URL:", public_url)
app.run(host='0.0.0.0', port=5000)
Lưu ý thay thế YOUR_NGROK_AUTH_TOKEN bằng token của bạn để kết nối với internet.
3. Triển Khai Script Google Docs Để Tính Điểm Tương Đồng
Sau khi API đã chạy, bạn có thể sử dụng đoạn mã sau trong Google Docs để đánh giá mức độ liên quan của các tiêu đề và nội dung.
function calculateSimilarityForHeadings() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var paragraphs = body.getParagraphs();
var apiUrl = "YOUR_PUBLIC_NGROK_URL/similarity";
var h1Text = "";
var h1Found = false;
var h2Results = [];
var fullText = "";
for (var i = 0; i < paragraphs.length; i++) {
var paragraph = paragraphs[i];
var style = paragraph.getHeading();
if (style === DocumentApp.ParagraphHeading.HEADING1 && !h1Found) {
h1Text = paragraph.getText();
h1Found = true;
}
if (style === DocumentApp.ParagraphHeading.HEADING2) {
var h2Text = paragraph.getText();
var h2Content = getContentUnderH2(paragraphs, i);
var h2Score = calculateSimilarity(apiUrl, h2Text, h2Content);
paragraph.appendText(` [Similarity: ${h2Score.toFixed(2)}]`);
h2Results.push({ h2: h2Text, content: h2Content });
}
}
}
function getContentUnderH2(paragraphs, startIndex) {
var content = [];
for (var j = startIndex + 1; j < paragraphs.length; j++) {
var nextStyle = paragraphs[j].getHeading();
if (nextStyle === DocumentApp.ParagraphHeading.HEADING2 || nextStyle === DocumentApp.ParagraphHeading.HEADING1) {
break;
}
content.push(paragraphs[j].getText());
}
return content.join(" ");
}
function calculateSimilarity(apiUrl, keyword, text) {
var response = UrlFetchApp.fetch(apiUrl, {
method: "post",
contentType: "application/json",
payload: JSON.stringify({ keyword: keyword, text: text }),
});
var result = JSON.parse(response.getContentText());
return result.similarityScore;
}
4. Ứng Dụng Trong SEO
- Tối ưu tiêu đề: Đánh giá mức độ phù hợp giữa H1, H2 và nội dung.
- Phân tích nội dung: Xác định các đoạn văn không liên quan để chỉnh sửa.
- Nghiên cứu từ khóa: Kiểm tra nội dung có khớp với từ khóa mục tiêu hay không.
Kết Luận
Bằng cách kết hợp BERT và Google Docs, bạn có thể tự động đánh giá chất lượng nội dung SEO một cách chính xác. Công cụ này giúp tiết kiệm thời gian và tối ưu hóa nội dung hiệu quả hơn.
https://shorturl.fm/o4mqa
https://shorturl.fm/yBxDm
https://shorturl.fm/repBe
https://shorturl.fm/Hr6Zg
https://shorturl.fm/vfkSN
11aa is a neat little site. Quick and easy to use, and the games are simple too. Explore at: 11aa
I’m all about quick lottery results, so let’s see if ketquasoxo can keep up. Time to know!. Get your results: ketquasoxo
Thinking of joining 123win44 and trying my luck there. Seems like a good platform for some gaming. Let’s give it a try and good luck to me! Visit it here: 123win44
https://shorturl.fm/SLG9n
https://shorturl.fm/Z36Cq
The mobile version works perfectly which is great because I usually play on the go. Super convenient php365ph