Nguyễn Nam

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

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


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.

11 Responses

Leave a Reply

Your email address will not be published. Required fields are marked *

Solverwp- WordPress Theme and Plugin