ASO优化之教你如何得到ASO优化100关键词字符

ASO最关键的自然是关键词,AppStore流量70%以上都来源于搜索,掌握AppStore流量来源,也就等于掌握了用户,剩下的只要你是一款好产品即可。所以做好苹果给的100个关键字至关重要。

  App标题和关键词关键词植入的几大原则:

1、关键词权重大小排名:App名称>App关键词>App描述>应用内购买名或描述;

  2、App名称与关键词的权重无法叠加,如果在标题中出现,最好不要在关键词再出现,避免浪费字符;

  3、App名称采用主标题加副标题的形式,主标题是App名,副标题介绍App作用并提升核心关键词的权重,如:一起秀——最好玩的全民手机视频直播,同城美女聊天交友社交平台,自带美颜美妆功能;

  4、利用副标题的高权重,采用轮换战术,优化各个关核心键词,当已有核心关键词排名优化靠前,选用其他的核心关键词;

  5、关键词中越靠前的关键词权重越大

选词最有效方法

  选词基本选取跟自身产品相关了,流量适中的关键词,这里顾及到优化难度和热度的问题。经过实践证明,通过竞品选词有的好处就是,一款优化好的竞品基本覆盖了你想要覆盖的词,节省了你选词的很多时间,并且可以通过一款竞品的关键词,判断出,竞品大概在后台设置的100个字符是什么,有利于自身关键字符的提交。

  在果搜ASO中,输入跟自己产品相关的核心关键词,我就以旅游App为例子,首先输入“旅游”这个词。 从搜索结果中找到自己竞品,比较名气比较大,排名靠前的App,看谁覆盖的关键词比较多,从众多竞品中,发现“去哪儿”覆盖关键词4000+。

  为什么会这样做呢,因为竞品的关键词覆盖够多,该覆盖的词基本都覆盖了,只要参照竞品词去做,基本就能找到所有你需要覆盖的词,下面就以“去哪儿‘为例。

  关键词覆盖4484多个,top10达到1000多个可见优化的很好,接下来通过关键词热度从高到低进行排序如图:

  然后按照顺序复制热度5000以上的关键词到word文档,接下来就是重点了,这个时候就需要组建关键词集合了,把具有相同词语的词和同音词放到一个关键词集合,其余的按照词的类别放在一起,如图:

  下面演示一下如何进行合词,举个例子:”马蜂窝,马蜂窝旅游攻略,马蜂窝自由行,蚂蜂窝旅游攻略,蜂窝网,游戏蜂窝,蜂窝,蚂蜂窝自由行”

  这里面需要去重(就是去掉相同的词,关键词只需要出现一次就可以了)和去掉同音词。如“蚂蜂窝为竞品词”,马蜂窝为同音词

  这样就得到最终关键词为:蚂蜂窝,旅游,攻略,自由行,游戏

  根据以上方法会得到一个关键词词库,然后复制一部分关键词到优化助手中,如下图(注意带来自己的App名称,关键词控制在100字符以内)

  根据提示进行修改,得到关键词如下

  “途牛网,快车,交友,穷游,租车,神州,一嗨,易到,滴滴,快的,打车,专车,顺风车,优步,携程,阿里,驴妈妈,预订,布卡,订票,抢票,同城,华住,蚂蜂窝,攻略,游戏”

  重复以上步骤,根据自身产品需要的关键词,和前面讲到的关键词排序优化规则,进行100字符排序。这样筛选下来,可以选出两套关键词。这样选词工作基本完成。

  选词方法多种多样,而且关键词也不是一成不变的,平时多关注热搜,搜索指数排行,常查询竞品关键词,查看哪些词是自己没有覆盖到的,放入自己关键词备选词库。

  对于一款新的App很难获得很好的排名,对于没有预算的公司,可以剔除一些高热,竞争度大的词,选取一些热度适中的词,当然推广App都是烧钱的,没有一定的付费是很难把产品做起来的。

果搜ASO(果搜 -专业AppStore大数据平台)是国内专业APP数据分析平台,关注移动ASO推广。

 

原文链接: http://www.guoaso.com/section/20160518-219

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASO优化算法是一种基于蚁群算法的优化算法,它可以用于解决多目标优化问题。BP神经网络算法可以用来进行分类、回归等任务。在使用BP算法进行ASO优化时,可以将多个目标转化为一个目标,然后使用BP神经网络进行训练和预测。 以下是一些实现ASO优化BP算法的C语言代码示例: 1. BP神经网络的实现 ```c //定义神经元结构体 typedef struct neuron { double input; //输入 double output; //输出 double delta; //误差 double bias; //偏置 double *weights; //权重 } neuron_t; //定义层结构体 typedef struct layer { int num_neurons; //神经元数量 neuron_t *neurons; //神经元 } layer_t; //定义神经网络结构体 typedef struct neural_network { int num_layers; //层数 layer_t *layers; //层 } neural_network_t; //初始化神经元 void init_neuron(neuron_t *neuron, int num_weights) { neuron->input = 0.0; neuron->output = 0.0; neuron->delta = 0.0; neuron->bias = (double)rand() / RAND_MAX; //随机初始化偏置 neuron->weights = (double *)malloc(num_weights * sizeof(double)); //动态分配权重数组 for (int i = 0; i < num_weights; i++) { neuron->weights[i] = (double)rand() / RAND_MAX; //随机初始化权重 } } //初始化层 void init_layer(layer_t *layer, int num_neurons, int num_weights) { layer->num_neurons = num_neurons; layer->neurons = (neuron_t *)malloc(num_neurons * sizeof(neuron_t)); //动态分配神经元数组 for (int i = 0; i < num_neurons; i++) { init_neuron(&layer->neurons[i], num_weights); } } //初始化神经网络 void init_neural_network(neural_network_t *nn, int num_inputs, int num_outputs, int num_hidden_layers, int num_hidden_neurons) { nn->num_layers = 2 + num_hidden_layers; //输入层、输出层和隐藏层 nn->layers = (layer_t *)malloc(nn->num_layers * sizeof(layer_t)); //动态分配层数组 //初始化输入层 init_layer(&nn->layers[0], num_inputs, 0); //初始化隐藏层 for (int i = 0; i < num_hidden_layers; i++) { if (i == 0) { init_layer(&nn->layers[i+1], num_hidden_neurons, num_inputs); } else { init_layer(&nn->layers[i+1], num_hidden_neurons, num_hidden_neurons); } } //初始化输出层 init_layer(&nn->layers[nn->num_layers-1], num_outputs, num_hidden_neurons); } //激活函数 double activation_function(double x) { return 1.0 / (1.0 + exp(-x)); } //前向传播 void feed_forward(neural_network_t *nn, double *inputs) { //输入层 for (int i = 0; i < nn->layers[0].num_neurons; i++) { nn->layers[0].neurons[i].output = inputs[i]; } //隐藏层和输出层 for (int i = 1; i < nn->num_layers; i++) { for (int j = 0; j < nn->layers[i].num_neurons; j++) { double sum = 0.0; for (int k = 0; k < nn->layers[i-1].num_neurons; k++) { sum += nn->layers[i-1].neurons[k].output * nn->layers[i].neurons[j].weights[k]; } sum += nn->layers[i].neurons[j].bias; nn->layers[i].neurons[j].input = sum; nn->layers[i].neurons[j].output = activation_function(sum); } } } //计算输出误差 void compute_output_error(neural_network_t *nn, double *targets) { layer_t *output_layer = &nn->layers[nn->num_layers-1]; for (int i = 0; i < output_layer->num_neurons; i++) { double output = output_layer->neurons[i].output; double delta = targets[i] - output; output_layer->neurons[i].delta = delta * output * (1.0 - output); } } //计算隐藏层误差 void compute_hidden_error(layer_t *layer, layer_t *next_layer) { for (int i = 0; i < layer->num_neurons; i++) { double output = layer->neurons[i].output; double sum = 0.0; for (int j = 0; j < next_layer->num_neurons; j++) { sum += next_layer->neurons[j].weights[i] * next_layer->neurons[j].delta; } layer->neurons[i].delta = output * (1.0 - output) * sum; } } //反向传播 void backpropagation(neural_network_t *nn, double *targets, double learning_rate) { //计算输出层误差 compute_output_error(nn, targets); //计算隐藏层误差 for (int i = nn->num_layers-2; i > 0; i--) { compute_hidden_error(&nn->layers[i], &nn->layers[i+1]); } //更新权重和偏置 for (int i = nn->num_layers-1; i > 0; i--) { for (int j = 0; j < nn->layers[i].num_neurons; j++) { neuron_t *neuron = &nn->layers[i].neurons[j]; for (int k = 0; k < nn->layers[i-1].num_neurons; k++) { double delta_weight = learning_rate * neuron->delta * nn->layers[i-1].neurons[k].output; neuron->weights[k] += delta_weight; } neuron->bias += learning_rate * neuron->delta; } } } //训练神经网络 void train_neural_network(neural_network_t *nn, double **inputs, double **targets, int num_examples, double learning_rate, int epochs) { for (int epoch = 0; epoch < epochs; epoch++) { double error = 0.0; for (int example = 0; example < num_examples; example++) { feed_forward(nn, inputs[example]); compute_output_error(nn, targets[example]); error += 0.5 * pow(targets[example][0] - nn->layers[nn->num_layers-1].neurons[0].output, 2); backpropagation(nn, targets[example], learning_rate); } printf("Epoch %d: error = %lf\n", epoch, error); } } //使用神经网络进行预测 double predict(neural_network_t *nn, double *inputs) { feed_forward(nn, inputs); return nn->layers[nn->num_layers-1].neurons[0].output; } ``` 2. ASO优化算法的实现 ```c //定义蚂蚁结构体 typedef struct ant { double *position; //位置 double *velocity; //速度 double *best_position; //最佳位置 double best_fitness; //最佳适应度 } ant_t; //初始化蚂蚁 void init_ant(ant_t *ant, int num_dimensions) { ant->position = (double *)malloc(num_dimensions * sizeof(double)); //动态分配位置数组 ant->velocity = (double *)malloc(num_dimensions * sizeof(double)); //动态分配速度数组 ant->best_position = (double *)malloc(num_dimensions * sizeof(double)); //动态分配最佳位置数组 for (int i = 0; i < num_dimensions; i++) { ant->position[i] = (double)rand() / RAND_MAX; //随机初始化位置 ant->velocity[i] = 0.0; //初始化速度为0 ant->best_position[i] = ant->position[i]; //最佳位置初始化为当前位置 } ant->best_fitness = DBL_MAX; //最佳适应度初始化为最大值 } //计算适应度 double fitness_function(ant_t *ant, neural_network_t *nn, double **inputs, double *targets, int num_examples) { double error = 0.0; for (int example = 0; example < num_examples; example++) { double output = predict(nn, inputs[example]); error += 0.5 * pow(targets[example] - output, 2); } return error; } //更新速度和位置 void update_velocity_and_position(ant_t *ant, ant_t *global_best_ant, double inertia_weight, double cognitive_weight, double social_weight) { for (int i = 0; i < num_dimensions; i++) { double r1 = (double)rand() / RAND_MAX; //随机数1 double r2 = (double)rand() / RAND_MAX; //随机数2 ant->velocity[i] = inertia_weight * ant->velocity[i] + cognitive_weight * r1 * (ant->best_position[i] - ant->position[i]) + social_weight * r2 * (global_best_ant->best_position[i] - ant->position[i]); ant->position[i] += ant->velocity[i]; if (ant->position[i] < 0.0) { ant->position[i] = 0.0; } else if (ant->position[i] > 1.0) { ant->position[i] = 1.0; } } } //ASO优化算法 void ASO(neural_network_t *nn, double **inputs, double *targets, int num_examples, int num_ants, int num_iterations, double inertia_weight, double cognitive_weight, double social_weight) { //初始化蚂蚁 ant_t *ants = (ant_t *)malloc(num_ants * sizeof(ant_t)); for (int i = 0; i < num_ants; i++) { init_ant(&ants[i], num_dimensions); } //计算适应度 double *fitness = (double *)malloc(num_ants * sizeof(double)); for (int i = 0; i < num_ants; i++) { fitness[i] = fitness_function(&ants[i], nn, inputs, targets, num_examples); if (fitness[i] < global_best_fitness) { global_best_fitness = fitness[i]; memcpy(global_best_position, ants[i].position, num_dimensions * sizeof(double)); } } //ASO优化循环 for (int iteration = 0; iteration < num_iterations; iteration++) { for (int i = 0; i < num_ants; i++) { update_velocity_and_position(&ants[i], &global_best_ant, inertia_weight, cognitive_weight, social_weight); double fitness_new = fitness_function(&ants[i], nn, inputs, targets, num_examples); if (fitness_new < fitness[i]) { fitness[i] = fitness_new; memcpy(ants[i].best_position, ants[i].position, num_dimensions * sizeof(double)); if (fitness_new < global_best_fitness) { global_best_fitness = fitness_new; memcpy(global_best_position, ants[i].position, num_dimensions * sizeof(double)); } } } } } ``` 将BP神经网络和ASO优化算法结合起来,可以实现ASO优化BP算法。 ```c int main() { srand(time(NULL)); //输入数据 double inputs[NUM_EXAMPLES][NUM_INPUTS] = { {0.0, 0.0}, {0.0, 1.0}, {1.0, 0.0}, {1.0, 1.0} }; //目标数据 double targets[NUM_EXAMPLES] = {0.0, 1.0, 1.0, 0.0}; //初始化神经网络 neural_network_t nn; init_neural_network(&nn, NUM_INPUTS, 1, 1, 4); //训练神经网络 train_neural_network(&nn, inputs, targets, NUM_EXAMPLES, LEARNING_RATE, EPOCHS); //ASO优化BP算法 ASO(&nn, inputs, targets, NUM_EXAMPLES, NUM_ANTS, NUM_ITERATIONS, INERTIA_WEIGHT, COGNITIVE_WEIGHT, SOCIAL_WEIGHT); //使用神经网络进行预测 for (int i = 0; i < NUM_EXAMPLES; i++) { double output = predict(&nn, inputs[i]); printf("Input: %lf %lf, Target: %lf, Output: %lf\n", inputs[i][0], inputs[i][1], targets[i], output); } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值